gpt4 book ai didi

无法比较 token

转载 作者:行者123 更新时间:2023-11-30 17:08:19 24 4
gpt4 key购买 nike

我使用 C 编写了一个代码来标记文件中的数据。如果当前标记等于 SIOL,我想打印一些数据。我的问题是 strcmp 不起作用。你能发现任何错误吗?这是代码。谢谢您的帮助

int main()
{
FILE* fp;

char line[1024];
char *val1;

fp = fopen("sample1.txt" , "r");
while (fgets(line, sizeof(line), fp) != NULL)
{
val1 = strtok(line, " ");
if (strcmp(val1,"SIOL")==0)
{
printf("Sucess!");
return 0;
}
else
{
while(val1)
{
printf("%s\n", val1);
val1=strtok(NULL, " ");
}
}
}
}

sample1.txt 像这样:

HAHA
SIOL
Hello World!
SIOL
123 4 345 65 756 867 789797
Hello World

最佳答案

您的实现中的问题是它没有正确处理 \n

fgets遇到'\n'字符时,它会将其作为字符串的一部分返回。因此,当您进行标记时,文件中的两个 "SIOL" 字符串都会作为 "SIOL\n" 返回到您的程序,因为它们都位于字符串的末尾。 strcmp 不认为 "SIOL""SIOL\n" 彼此相等,因此它返回非零值。

要解决此问题,请将 '\n' 添加到程序接受的分隔符列表中:

val1 = strtok(line, " \n"); // change the second call of strtok as well

这将确保 strtok 消除 token 末尾的 '\n',并将干净的 token 传回给您。

关于无法比较 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33720134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com