-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

我同意你应该展示你所做的事情的评论。请下次这样做。

现在,我想提出两种调试棘手问题的方法:使用 printfs 并了解流程或使用 gdb。我已经用 printf 方法评论了你的程序。还没有测试所有情况......但这应该会给你一个调试的方向。希望能帮助到你。请记住在下次发布问题之前执行此步骤 :-)

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

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 starting letter does not match, forget it */
        if (str1[0]==str2[i]) {
                flag = 1;
                // Iterate thro' str1
                for ( j = 0; str1[j]; j++) {
                        if (str1[j] != str2[i+j]) {
                                printf("%s not found at index %d of %s\n", str1, i, str2);
                                flag=0;
                                break;  // out of inner for loop
                        }
                }
                if (j == strlen(str1)) {
                        // found the entire string.
                        break;  // out of outer for loop
                }
        }
  }
  if (flag==1) {
        printf("%s found at index %d of %s\n", str1, i, str2);
  }
  getchar();
} 
于 2013-07-24T16:07:00.120 回答
0
#include <string.h>

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

请查看strstr函数的文档。

于 2013-07-24T17:11:07.200 回答
0

我已经重写了代码并稍作修改,它对我有用,检查所有必要的场景,然后告诉我。

    public static bool findString(string searchText, string fullText)
    {
        bool result = false;
        if (searchText.Length > fullText.Length)
        {
            return false;
        }
        for (int i = 0; i <= (fullText.Length - searchText.Length); i++)
        {
            if (searchText[0] == fullText[i])
            {
                for (int j=0; j<searchText.Length ;j++)
                {

                    if ((i+j)< fullText.Length && searchText[j] == fullText[i+j])
                        result = true;
                    else
                    {
                        result = false;
                        break;
                    }
                }
            }
            if (result)
            {
                Console.WriteLine("found at index {0}", i);
                break;
            }
        }
            return result;
    }

对不起语法,我只有 c# 可用。您必须使用 strlen(string) 作为长度,使用 '%d' 作为 '{0}',使用 printf 作为 Console.Writeline(" ");

于 2013-07-24T16:22:38.070 回答
0

尝试这个:

int i,j,flag=0, match=0;
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])
    {
        match=1;
        for ( j = 0; str1[j]; j++)
        {
            if (str1[j]!=str2[i+j])
                match=0;
        }
        if(match == 1)
        {
            flag = 1;
            break;
        }
    }
}
if (flag==1)
    printf("found at index %d ",i);
else
    printf("not found");
于 2013-07-24T16:03:56.593 回答
-1
//Declaration: char *strstr(const char *str1, const char *str2);
//Return: It returns a null pointer if no match is found.

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

int main(void)
{
char *p;

p = strstr("goa", "gogoa");
printf(p);

return 0;
}
于 2013-07-24T16:05:39.350 回答