#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define STRING_LENGTH 1000000 // 生成する文字列の長さを定義
#define TARGET "mouri" // 探索するターゲット文字列を定義
// 指定された長さのランダムなアルファベット文字列を生成する関数
void generate_random_string(char *str, int length) {
const char charset[] = "abcdefghijklmnopqrstuvwxyz"; // 使用する文字セットを定義
for (int i = 0; i < length; i++) {
int key
= rand() % (int)(sizeof(charset
) - 1); // 乱数を生成して文字セットのインデックスに変換 str[i] = charset[key]; // 生成された文字を文字列に追加
}
str[length] = '\0'; // 文字列の終端を示すヌル文字を追加
}
int main() {
char *str
= (char *)malloc(STRING_LENGTH
+ 1); // 1,000,000文字分のメモリを動的に確保
generate_random_string(str, STRING_LENGTH); // ランダムな文字列を生成
printf("生成された文字列: %.100s... (最初の100文字を表示)\n", str
); // 生成された文字列の最初の100文字を表示
char *ptr = str;
int count = 0;
// 文字列中の「mouri」の出現回数をカウント
while ((ptr
= strstr(ptr
, TARGET
)) != NULL
) { count++;
ptr++;
}
printf("文字列 '%s' は生成された文字列に %d 回出現しました。\n", TARGET
, count
); // 出現回数を表示
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKI2RlZmluZSBTVFJJTkdfTEVOR1RIIDEwMDAwMDAgIC8vIOeUn+aIkOOBmeOCi+aWh+Wtl+WIl+OBrumVt+OBleOCkuWumue+qQojZGVmaW5lIFRBUkdFVCAibW91cmkiICAgICAgICAvLyDmjqLntKLjgZnjgovjgr/jg7zjgrLjg4Pjg4jmloflrZfliJfjgpLlrprnvqkKCi8vIOaMh+WumuOBleOCjOOBn+mVt+OBleOBruODqeODs+ODgOODoOOBquOCouODq+ODleOCoeODmeODg+ODiOaWh+Wtl+WIl+OCkueUn+aIkOOBmeOCi+mWouaVsAp2b2lkIGdlbmVyYXRlX3JhbmRvbV9zdHJpbmcoY2hhciAqc3RyLCBpbnQgbGVuZ3RoKSB7CiAgICBjb25zdCBjaGFyIGNoYXJzZXRbXSA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7ICAvLyDkvb/nlKjjgZnjgovmloflrZfjgrvjg4Pjg4jjgpLlrprnvqkKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBpbnQga2V5ID0gcmFuZCgpICUgKGludCkoc2l6ZW9mKGNoYXJzZXQpIC0gMSk7ICAgIC8vIOS5seaVsOOCkueUn+aIkOOBl+OBpuaWh+Wtl+OCu+ODg+ODiOOBruOCpOODs+ODh+ODg+OCr+OCueOBq+WkieaPmwogICAgICAgIHN0cltpXSA9IGNoYXJzZXRba2V5XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g55Sf5oiQ44GV44KM44Gf5paH5a2X44KS5paH5a2X5YiX44Gr6L+95YqgCiAgICB9CiAgICBzdHJbbGVuZ3RoXSA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmloflrZfliJfjga7ntYLnq6/jgpLnpLrjgZnjg4zjg6vmloflrZfjgpLov73liqAKfQoKaW50IG1haW4oKSB7CiAgICBjaGFyICpzdHIgPSAoY2hhciAqKW1hbGxvYyhTVFJJTkdfTEVOR1RIICsgMSk7ICAvLyAxLDAwMCwwMDDmloflrZfliIbjga7jg6Hjg6Ljg6rjgpLli5XnmoTjgavnorrkv50KCiAgICBzcmFuZCh0aW1lKE5VTEwpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDkubHmlbDjga7jgrfjg7zjg4njgpLnj77lnKjjga7mmYLplpPjgafoqK3lrpoKICAgIGdlbmVyYXRlX3JhbmRvbV9zdHJpbmcoc3RyLCBTVFJJTkdfTEVOR1RIKTsgICAgIC8vIOODqeODs+ODgOODoOOBquaWh+Wtl+WIl+OCkueUn+aIkAoKICAgIHByaW50Zigi55Sf5oiQ44GV44KM44Gf5paH5a2X5YiXOiAlLjEwMHMuLi4gKOacgOWIneOBrjEwMOaWh+Wtl+OCkuihqOekuilcbiIsIHN0cik7IC8vIOeUn+aIkOOBleOCjOOBn+aWh+Wtl+WIl+OBruacgOWIneOBrjEwMOaWh+Wtl+OCkuihqOekugoKICAgIGNoYXIgKnB0ciA9IHN0cjsKICAgIGludCBjb3VudCA9IDA7CiAgICAvLyDmloflrZfliJfkuK3jga7jgIxtb3VyaeOAjeOBruWHuuePvuWbnuaVsOOCkuOCq+OCpuODs+ODiAogICAgd2hpbGUgKChwdHIgPSBzdHJzdHIocHRyLCBUQVJHRVQpKSAhPSBOVUxMKSB7CiAgICAgICAgY291bnQrKzsKICAgICAgICBwdHIrKzsKICAgIH0KCiAgICBwcmludGYoIuaWh+Wtl+WIlyAnJXMnIOOBr+eUn+aIkOOBleOCjOOBn+aWh+Wtl+WIl+OBqyAlZCDlm57lh7rnj77jgZfjgb7jgZfjgZ/jgIJcbiIsIFRBUkdFVCwgY291bnQpOyAvLyDlh7rnj77lm57mlbDjgpLooajnpLoKCiAgICBmcmVlKHN0cik7ICAvLyDjg6Hjg6Ljg6rjgpLop6PmlL4KICAgIHJldHVybiAwOwp9