如何解决从文件中提取所需的单词,然后删除所有其他单词
在这段代码中,我正在从文件中提取特定的单词,但是编码不仅在获取所需的单词,而且还包含其他单词,
类似的:
'bilal khan' found
'9087' found
'sssss' found
'ixing' found
当我只想从9087
文件中提取第二个单词时。
该怎么做?
我的代码
while (fgets(string,70 - 52,fr))
{
word = strtok(string,",");
int diff;
while (word != NULL)
{
diff = strcmp(string,word);
if (diff == 0)
{
printf("'%s' found\n",word);
}
word = strtok(NULL,");
}
}
解决方法
您要比较的是word
和string
指向的标记化字符串的结果。
当strtok
在标记时string
进行修改时,在第一个strtok
之后,您无法确定是否将其与string
进行比较来找到所需的标记,因此应该使用word
指针并将其与您要查找的单词进行比较。
作为strtok
的参数传递的字符串会发生什么:
请注意,此字符串已通过分解为较小的字符串(令牌)进行了修改。 或者,可以指定一个空指针,在这种情况下,该函数将继续扫描,直到对该函数的先前成功调用结束。
这基本上意味着string
将仅包含第一个令牌,并且每个strtok
周期的第一个fgets
在您的代码中将始终为true,而所有其他周期将始终为true否,除非第一个令牌在string
中的某个点重复。
Example of a corrected implementation:
char string[50];
FILE *fr = fopen("test.txt","r");
char *word;
char *word_to_find = "9087"; //the word to find
while (fgets(string,sizeof(string),fr)) //second parameter needs to be the same size as the buffer
{
word = strtok(string,",");
int diff;
while (word != NULL)
{
diff = strcmp(word_to_find,word); //compare with a determined string
if (diff == 0)
{
printf("'%s' found\n",word);
}
word = strtok(NULL,");
}
}
对于具有以下内容的文件:
my,word,is,9087,
不是最后一个逗号,这是使strtok
再次循环,如果不存在,则检测到文件末尾并且未评估最后一个标记,您可以将其删除,但是需要添加额外的控制以确保实际上对最后一个令牌进行了评估。
输出将是:
'9087' found
'9087' found
请注意,正如我说的,string
将被修改,如果要避免这种情况,则应对其进行复制并标记化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。