私は自分の興味から、いくつかの文字列操作関数に取り組んでいます。ただし、将来のコードでこれらの関数を使用したいと思うかもしれません。文字列内に部分文字列が存在するかどうかを確認するために、次のように記述しました。しかし、私は問題に遭遇しました。私のプログラムは両方の文字列の各文字を比較しますが、文字の順序が正しくないという問題がありました。説明には長い時間がかかるので、例を挙げましょう。
文字列「fooobar」に「oobar」が存在するかどうかを確認すると、文字「o」の最初のインスタンスでトリップするため、プログラムでサブ文字列の場所を見つけるのに問題が発生します。これに対する回避策を開発しましたが、それが問題です。これは回避策であり、実際には確実な解決策ではありません。だから私は誰かが次のコードをどのように改善するか教えてもらえないかと思っていました(私は追加のライブラリを使用したくないことを覚えておいてください):
int chksbstr(char *str, char *sbstr)
{
int i, sbstrlen, strlen, p = 0;
for(i = 0; sbstr[i] != '\0'; i++);
sbstrlen = i;
for(i = 0; str[i] != '\0'; i++);
strlen = i;
if(sbstrlen > strlen)
{
printf("\n**Error substring is larger than base string!");
return 2;
}
if(sbstrlen == strlen)
{
if(str == sbstr) return 0;
else return 1;
}
for(i = 0; i <= strlen; i++)
{
if(str[i] == sbstr[p]) p++;
else if(str[i] != str[i - 1]) p = 0;
if(p == sbstrlen) return 0;
}
return 1;
}