[C++]シンプルな文字列マッチング
今日は、「競技プログラミングのためのC++」という書籍の内容を進めていこうと思う。
尤もこの書籍に関しては購入はお勧めしない。
内容自体は問題ないかもしれないが、
機械翻訳でコードが潰れているので兎に角がっかり感が強い。
あくまで買ってしまったので有効活用しようという趣旨で投稿している。

実際に書籍の内容を少し挙げてみようと思う。
以下は今回読み解くシンプルな文字列マッチングの内容である。
C++の文法を理解していれば読めなくもないが、
好き好んで読みたくもない私の気持ちも理解できると思う。
書籍の名前で期待を持っていただけにガッカリ感が強い。


上図のコードを読み解くと下記のようになる。
シンプルな内容なので比較的翻訳しやすいがあまり読みたい代物ではない。
#include <iostream>
using namespace std;
// シンプルな文字列マッチング
bool naiveMatch(string text, string pattern)
{
auto n = text.size();
auto m = pattern.size();
for(int i = 0; i <= n - m; ++i)
{
int j = 0;
while(j < m && text[i + j] == pattern[j])
{
++j;
}
if (j == m)
{
return true; // 一致が見つかった。
}
}
return false; // 一致するものが見つかりません。
}
int main()
{
string text = "Hello World!";
string pattern = "World";
cout << (naiveMatch(text, pattern) ? "パターンが見つかりました!" : "パターンが見つかりません!") << endl;
return 0;
}