C - 使用 strtok 的嵌套循环
C - Nested loop using strtok
我正在尝试使用 strtok 将文本文件拆分为可以传递给拼写检查功能的字符串,该文本文件包含“\n”、“?!,.”等字符ETC...
我需要打印任何未通过拼写检查的单词以及它们所在的行号。跟踪路线是我正在努力的事情。
到目前为止,我已经尝试过了,但文本文件的第一行只有 returns 结果:
char str[409377];
fread(str, noOfChars, 1, file);
fclose(file);
int lines=1;
char *token;
char *line;
char splitLine[] = "\n";
char delimiters[] = " ,.?!(){}*&^%$£_-+=";
line = strtok(str, splitLine);
while(line!=NULL){
token = strtok(line, delimiters);
while(token != NULL){
//print is just to test if I can loop through all the words
printf("%s", token);
//spellCheck function & logic here
token = strtok(NULL, delimiters);
}
line = strtok(NULL, splitLine);
lines++
}
可以使用嵌套的while循环和strtok吗?有没有更好的方法来跟踪行号?
strtok
函数不是可重入的!它不能用于同时标记多个字符串。这是因为它保留有关当前被标记化的字符串的内部状态。
如果您有现代编译器和标准库,则可以改用 strtok_s
。否则你必须想出另一个解决方案。
可以使用strtok,但是不太好用。这是一个愚蠢的函数,它真正做的就是用 nuls 和 return 替换分隔符,指向它分隔的序列的开头。所以它是破坏性的。它无法处理特殊情况,例如允许一个撇号的英语单词(we're 是一个单词,we're'e 不是),您必须确保明确列出所有分隔符。
最好自己编写 mystrok,这样您就可以了解它是如何工作的。然后将其用作您自己的单词提取器的基础。
你的错误的原因是你砍掉了第一行,然后这就是 strok 在后续调用中看到的全部内容。
我正在尝试使用 strtok 将文本文件拆分为可以传递给拼写检查功能的字符串,该文本文件包含“\n”、“?!,.”等字符ETC... 我需要打印任何未通过拼写检查的单词以及它们所在的行号。跟踪路线是我正在努力的事情。 到目前为止,我已经尝试过了,但文本文件的第一行只有 returns 结果:
char str[409377];
fread(str, noOfChars, 1, file);
fclose(file);
int lines=1;
char *token;
char *line;
char splitLine[] = "\n";
char delimiters[] = " ,.?!(){}*&^%$£_-+=";
line = strtok(str, splitLine);
while(line!=NULL){
token = strtok(line, delimiters);
while(token != NULL){
//print is just to test if I can loop through all the words
printf("%s", token);
//spellCheck function & logic here
token = strtok(NULL, delimiters);
}
line = strtok(NULL, splitLine);
lines++
}
可以使用嵌套的while循环和strtok吗?有没有更好的方法来跟踪行号?
strtok
函数不是可重入的!它不能用于同时标记多个字符串。这是因为它保留有关当前被标记化的字符串的内部状态。
如果您有现代编译器和标准库,则可以改用 strtok_s
。否则你必须想出另一个解决方案。
可以使用strtok,但是不太好用。这是一个愚蠢的函数,它真正做的就是用 nuls 和 return 替换分隔符,指向它分隔的序列的开头。所以它是破坏性的。它无法处理特殊情况,例如允许一个撇号的英语单词(we're 是一个单词,we're'e 不是),您必须确保明确列出所有分隔符。
最好自己编写 mystrok,这样您就可以了解它是如何工作的。然后将其用作您自己的单词提取器的基础。
你的错误的原因是你砍掉了第一行,然后这就是 strok 在后续调用中看到的全部内容。