gpt4 book ai didi

计算单行中没有 1 个或多个文本空格的单词

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:18 26 4
gpt4 key购买 nike

这是我的算法,用于计算 gets 中没有多个空格的单词:

int main(){
char str[300];
int i=0,words=0;

gets(str);

for(i=0; str[i] != '\0'; i++){
if(str[i] != ' ' && str[i] != '\t'){
words++;
while(str[i] != ' ' && str[i] != '\t')
i++;
}
}

printf("number of words = %d",words);
}

我想以这种方式转换它,它将与文件中的第一行文本一起工作,所以我尝试了这个:

FILE *fr;
int i=0,words=0;
fr=fopen("myfile.txt","r")
for(i=0; (i=getc(fr) != '\n'); i++){
if(i != ' ' && i != '\t'){
words++;
while(i != ' ' && i != '\t')
i++;
}
}
printf("number of words = %d",words)

但它不起作用,它会计算所有带空格的字符。我在 myfile.txt 中的第一行是“Have a nice day”,我希望结果等于 4。感谢您的建议。

最佳答案

当至少输入一个词时,您的代码具有未定义的行为:嵌套循环

while(str[i] != ' ' && str[i] != '\t')
i++;
}

忽略空终止符,继续阅读直到找到空格或制表符。这有可能通过缓冲区的末尾,导致未定义的行为。

要解决此问题,请添加检查 str[i] != '\0':

while(str[i] != '\0' && str[i] != ' ' && str[i] != '\t')
i++;
}

您的第二个代码片段完全错误:您不是逐行将文件读入缓冲区并运行您的算法,而是逐个字符地读取它,然后递增您获得的字符代码。这不会产生预期的结果。更改代码以逐行读取文件,并修复嵌套循环以解决上述缓冲区溢出问题。

注意:将 gets(str) 替换为 fgets(str, sizeof(str)) 以避免缓冲区溢出。

关于计算单行中没有 1 个或多个文本空格的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26108728/

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