C查找所有出现的子字符串

时间:2012-11-20 21:31:20

标签: c

是否有高效方法查找char *str2中非const char *str1的所有出现(包括重叠)并输出C中str1中匹配的数字位置(不是在C ++中,因为它不同)?

2 个答案:

答案 0 :(得分:1)

您的函数将在while循环中使用strstr()来查找str2str1的第一个匹配项。然后,您可以打印该匹配的偏移量。您将在比赛结束后的第一个角色继续搜索。当strstr()不再找到匹配项时,您将停止循环(由strstr()发出信号,返回NULL)。

如果您需要不重叠,则需要知道str2的长度,并且您将在匹配的字符加上str2的长度开始下一次搜索。

答案 1 :(得分:-1)

在循环中使用strstr()

int get_substr_count(const char * haystack, const char *needle)
{
    int count = 0;
    const char *tmp = haystack;
    while( tmp = strstr( tmp, needle)){
        printf( "Position: %d\n", (int)(tmp-haystack));
        ++count;
    }
    return count;
}