首先,我已经尝试过使用此处提到的strstr()
方法,但这不适用于我要解决的问题。
我将从用户(目标字符串)获取输入字符串,该字符串可以是单词或完整句子。然后,它逐行扫描输入文本文件,并检查该输入字符串是否存在于文件的任何行中。如果是这样,则会在屏幕上显示相应的文本文件行号和可以找到目标字符串的全文文件行。
使用strstr(line, targetString)
方法时遇到的问题如下:
让我们假设文件中有一个句子,"我用松鼠猛烈地打了那条鱼。"然后,我输入我的目标字符串,"我以无情的欢乐嘲笑猫墓地。"它会显示目标字符串是匹配的,大概是因为它只是找到与" I"的匹配。但是,我需要它才能匹配目标字符串的单词与文本文件行中的某些子字符串匹配。
我有什么想法可以解决这个问题?提前谢谢!
代码:
FILE *inputFile = fopen(fileName, "r");
i = 1;
while (fgets(line, sizeof line, inputFile) != NULL)
{
if ((strlen(line) != 1) && (strstr(line, targetString)))
{
printf("Line %d: ", i);
printf("%s\n\n", line);
}
i++;
}
答案 0 :(得分:2)
strstr()应该适用于您的问题。确保两个参数实际上都有空格而不是\ 0字符。像许多标准C库函数一样,strstr()将\ 0视为字符串终止符。根据你的描述,我猜你的问题是你一次读一行并用\ 0终止每一行,然后一次开始匹配一行。如果您将所有字符串一次读入缓冲区,等于删除换行符的文件大小,则可以解决问题。
为了能够更好地回答您的问题,我需要查看您当前的源代码以及您期望工作的测试用例。
答案 1 :(得分:1)
使用strstr(line,targetString)方法时的问题如下:让我们假设文件中有一个句子,"我用松鼠猛烈地打了那条鱼。"然后,我输入我的目标字符串,"我以无情的欢乐嘲笑猫墓地。"它会显示目标字符串是匹配的,大概是因为它只是找到与" I"匹配。
这不是strstr
的工作原理。它与第一个单词/字母不匹配,它匹配整个字符串。
答案 2 :(得分:1)
让我们假设文件中有一句话,“我用松鼠猛烈地打了那条鱼。”然后,我输入我的目标字符串,“我以无情的欢乐嘲笑猫墓地。”它将显示目标字符串是匹配的,可能是因为它只是找到与“I”的匹配。
听起来你正在将strstr()
的结果解释为相关字符串的索引,但实际上结果是char *
,即指针到字符串中的第一个匹配。你回来的0
不是第一个字符的索引,它是nil
,意味着没有匹配。