在txt中找到了一个带有strstr()的字符串

时间:2014-05-22 23:02:18

标签: c search strstr

我想在c中创建一个代码,用于搜索使用strstr()函数在txt文件中找到字符串的次数。

我用strastr()制作了一个测试代码,但是我遇到了问题。

例如我有" this is a text"这样的句子,当我搜索"is"时,我得到一个结果"is found 2 times",因为它需要"是"来自"这"。我不想从is this我想要"是"只作词。没有这个"问题"我可以搜索吗?使用strstr()进行一些更改

#include <stdio.h>
#include<string.h>
int main()
{
    char*ptr;
    char input[]=("this is a text");
    char key[10];
    int counter;
    scanf("%s",key);
    ptr=strstr(input,key);
    while (ptr==NULL)
    {
        printf("not found\n");
        break;
    }
    while(ptr!=NULL)
    {
        counter++;
        ptr=strstr(ptr+1,key);
    }
    printf("%s found %d times\n",key,counter);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

这是预期的行为,strstr()函数与整个单词不匹配,它只是一个匹配找到的任何子字符串的字符串匹配器。根据您的要求,您需要编写一个自定义字符串匹配器,搜索整个单词并匹配它们。

一种方法是:

     1- Read the file character by character, skip all non alpha characters.
     2- Start matching the word you are searching for character by character 
until either
         - You mismatch one character, now skip all alpha characters.
         - You matched the whole word, 
             - if the next character in the file is non-Alpha 
                 - Increment your counter.

http://www.cplusplus.com/reference/cstring/strstr/

答案 1 :(得分:1)

我猜你想在C中做某种形式的正则表达式。在你的例子中,你正在寻找"\bis\b",而不是字符"is"(在这种情况下,您获得了正确的结果。)

您可以考虑使用某种形式的正则表达式库。这些链接有一些信息:

Regular expressions in C: examples?

http://www.lemoda.net/c/unix-regex/

或者您可以考虑具体实施您正在寻找的内容。

的内容
while(ptr!=NULL)
{
    if (ptr == &input[0]) {
        if (isspace(*(ptr+strlen(key)) || *(ptr+strlen(key)=='\0') {
            counter++;
        }
    } else {
        if (isspace(*(ptr-1) && (isspace(*(ptr+strlen(key)) || *(ptr+strlen(key)=='\0')) {
            counter++;
        }
    }
    ptr=strstr(ptr+1,key);
}

注意:我知道这段代码远未得到优化,但我认为它的代码有效并且非常明显。