多字搜索

时间:2014-10-21 06:29:11

标签: c arrays string search

我想提出一个代码,允许我多次返回关键字的位置。例如,下面的程序返回9,即数组内部的位置,即第一个Point的出现位置。但是,我希望搜索整个数组中的所有关键字,因为关键字可以在我负责搜索的数组中多次出现。基本上我希望能够返回9,17等等,具体取决于字符串。

我正在考虑进入某种循环,但我对strstr命令没有经验肯定。

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

int main()
{
   char haystack[30] = "TutorialsPointandPoint";
   char needle[10] = "Point";
   char *ret;

   ret = strstr(haystack, needle);
   printf("The substring is: %d\n", ret-haystack);

   return(0);
}

3 个答案:

答案 0 :(得分:0)

当strstr返回指向第一次出现搜索字符串的指针时,只要没有得到空指针,就可以使用返回值作为strstr的新起点。

或多或少:

ret = strstr(haystack, needle);
while(ret!=NULL)
{
printf("The substring is: %t\n", ret-haystack);
ret++;
ret = strstr(ret , needle); 
}

答案 1 :(得分:0)

Tobias走在正确的轨道上,但请记住strstr将匹配字符串开头的针,因此您将陷入无限循环。

int main() {
    char haystack[] = "TutorialsPointandPoint";
    char needle[] = "Point";

    char *search = haystack;

    while(search != NULL)
    {
        search = strstr(search, needle);

        if(search)
        {
            search++;
            printf("The substring is: %zu\n", search - haystack);
        }
    }

    return 0;
}

答案 2 :(得分:0)

试试这个......

  int a=0;
  ret = strstr(haystack+a,needle);
  printf("The substring is: %d\n", (a=ret-haystack));
    while(strlen(haystack+a+strlen(needle))>strlen(needle))
    {
       ret = strstr(haystack+a+strlen(needle),needle);
       printf("The substring is: %d\n", (a=ret-haystack));
    }