私は文字列を持っていると言います:
a,b,c,d,e-f,g,h,
abcdefgh
そして、1文字スキップした部分文字列が含まれているかどうかを確認したいと思います。後で別のスキップ カウントに変更したり、キャラクター間の異なるスキップとの一致をチェックしたりすることもあります。
これにアプローチする最良の方法は何ですか?おそらく私が行方不明になっているcに何かありますか?
私は文字列を持っていると言います:
a,b,c,d,e-f,g,h,
abcdefgh
そして、1文字スキップした部分文字列が含まれているかどうかを確認したいと思います。後で別のスキップ カウントに変更したり、キャラクター間の異なるスキップとの一致をチェックしたりすることもあります。
これにアプローチする最良の方法は何ですか?おそらく私が行方不明になっているcに何かありますか?
単純なforループでうまくいきます。
const char *d = "abcdefgh";
const char *s = "a,b,c,d,e-f,g,h,";
int len = strlen(s);
for (i=0; i<len; i+=2) {
if (s[i] != d[i/2]) {
/* not equal */
break;
}
}
注:最初に、文字列の長さが他の文字列の少なくとも2倍であることを確認する必要があります。
文字列「abcdefgh」(ドットは任意の文字に一致)の正規表現検索を実行できます。これを一般化して、長さが 1 文字以上の区切り文字列を次の正規表現で使用することができます: "a.+b.+c.+d.+e.+f.+g.+h" (+ を * に変更)長さゼロ以上の文字のセパレーターを使用するには)。C での正規表現の使用に関するガイダンスを次に示します: C での正規表現: 例?
RE を使用する方が少し簡単かもしれませんが、ランタイム パフォーマンスの点でよりコストがかかります。より迅速な解決策は、検索文字列、区切り文字、および検索する文字列を受け取り、区切り文字をスキップして検索文字列を探す関数を作成することです。これは C プログラミングの良い練習になります。もっと簡単な方法を見つけたとしても、この関数を自分で書くことで多くのことが得られると思います。