我想在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;
}
答案 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.
答案 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);
}
注意:我知道这段代码远未得到优化,但我认为它的代码有效并且非常明显。