アプリ版:「スタンプのみでお礼する」機能のリリースについて

キーボードから入力した文字列 str に対し, This is~の文字列中に str が出現するかどうかを判定して表示するプログラムを作成したいのですが、うまくコンパイルができません。
条件ですが、、、
・forループを利用し、0文字目、1文字目と順に検索していく
・strstr関数およびstring.hを利用しない
です。このプログラムをいじって教えてほしいです。
ややこしくて答えづらい質問かと思いますが、有識者の知恵を拝借したいです。よろしくお願いします。

#include <stdio.h>


int main(void)
{char str[256];
char s[] = "This is a pen. That is an apple.";
int i,j,k,checker;
printf("This is a pen. That is an apple.\n\n");
gets(str);



for(j=0;j<256;j++)
{
for(i=j,k=0;str[k]!='\0';k++,i++)
{


if(str[k]==s[i])
{
checker=1;
}

else
{
checker=0;
}
}

}


if(checker==0)
{
printf("NG!その文字列は含まれていません。\n");
}

else
{
printf("OK!その文字列は含まれています。\n");
}
}

A 回答 (3件)

if (! str[j])



if (str[j] == 0)

if (str[j] == '\0')
は同じ意味です. 同様に
if (s[i])

if (s[i] != 0)

if (s[i] != '\0')
も同じ意味.
    • good
    • 1

別解で探すところだけ:


for (i = 0; s[i]; ++i) {
for (j = 0; str[j] && s[i+j] == str[j]; ++j)
;
if (! str[j])
break;
}
if (s[i]) {
文字列 str が見付かった
} else {
見付からなかった
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
当方初心者なので少し疑問に思ったところがあるのですが、

if (! str[j])
if (s[i])

は何を意味しているのでしょうか?
よろしければ教えてほしいです!

お礼日時:2007/11/22 00:01

いろいろなアルゴリズムがありますが、これはほんのちょっとした例です。



#include <stdio.h>

int main(void)
{
  char str[256];
  char s[] = "This is a pen. That is an apple.";
  int i, j;
  
  printf("%s\n\n", s);
  printf("検索したい文字列:");
  gets(str);
  
  i = j = 0;
  while (s[i] != '\0' && str[j] != '\0') {
    if (s[i] == str[j]) {
      i++;
      j++;
    }
    else {
      i -= j - 1;
      j = 0;
    }
  }
  
  if (str[j] == '\0')
    printf("OK!その文字列は含まれています。\n");
  else
    printf("NG!その文字列は含まれていません。\n");
  return 0;
}

(注)インデントのため、全角空白を使っています。
    • good
    • 0
この回答へのお礼

無暗にfor文ばかり使わず、while文も混入させるとわかりやすいですね!
非常にためになりました。ありがとうございました!

お礼日時:2007/11/22 00:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!