-1

str1が存在するかどうかを確認するために、次のコードを作成しましstr2た。ただし、すべてのシナリオで機能するわけではありません。

  #include<stdio.h>
  #include<stdlib.h>
  #include<string.h>
  int main()
   {
     int i,j,flag=1;
     char str1[]="goa",str2[]="gogoa";
     if (strlen(str1)>strlen(str2))
     {
       printf("not found");
       return;
     }
    for ( i = 0; str2[i]; i++)
    {
      if (str1[0]==str2[i])
      {
        for ( j = 0; str1[j]; j++)
        {
          if (str1[j]!=str2[i+j])
          {
            printf("not found");
            flag=0;
          }
        }
        break;
      }
    }
    if (flag==1)
    {
      printf("found at index %d ",i);
    }
    getchar();
 }

str1開始文字が複数回存在する場合は機能しませんstr2。それ以外の場合は正常に機能します。これを最適化して、すべてのシナリオで機能させるにはどうすればよいですか?

4

6 に答える 6

1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(){
    int i, j, flag=0, len1, len2;
    char str1[]="goa",str2[]="gogoa";
    len1 = strlen(str1);
    len2 = strlen(str2);
    if (len1 > len2){
        printf("not found");
        return 0;
    }
    for (i = 0; i <= len2 - len1; ++i){
        if (str1[0]==str2[i]){
            flag = 1;
            for (j = 1; str1[j]; ++j){
                if (str1[j]!=str2[i+j]){
                    flag=0;
                    break;
                }
            }
            if(flag==1)
                break;
        }
    }
    if (flag==1){
        printf("found at index %d ",i);
    } else {
        printf("not found");
    }
    return 0;
}
于 2013-07-24T16:19:14.383 に答える
0
#include <string.h>

if(strstr(str2, str1) != NULL) {
    /* ... */
}

strstr関数のドキュメントをチェックアウトしてください。

于 2013-07-24T17:11:07.200 に答える