哇瓜 2024-11-06 22:47 采纳率: 60%
浏览 39
已结题

输入一个英文句子,统计句子中单词的个数


#include<stdio.h>
#include<string.h>
#define N 1000
int main()
{
    int n,len,i;
    char str[N];
    gets(str);
    len=strlen(str);
    for(n=0;n<len;n++)
        if(str[n]==' ')
           i++;
    printf("%d",i+1);
    return 0;
}

哪里不对吗

  • 写回答

1条回答 默认 最新

  • 香格里辣 2024-11-06 22:48
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    你的代码里存在几个问题。首先,你定义了变量 i 但没有初始化它。因此,当你在循环中增加 i 的值时,它实际上是从一个不确定的值开始的。其次,你的代码只计算了空格的数量,而没有正确地计算单词的数量。一个句子中的单词是由空格分隔的,所以你需要追踪单词的起始位置而不是空格。以下是修改后的代码:

    #include<stdio.h>
    #include<string.h>
    #define N 1000
    
    int main() {
        int n, len, wordCount = 0;
        char str[N];
        
        // 使用fgets代替gets,因为gets是过时的并且可能导致缓冲区溢出
        fgets(str, N, stdin);
        len = strlen(str);
        
        // 如果字符串以换行符结尾,则移除它
        if (str[len - 1] == '\n') {
            str[len - 1] = '\0';
        }
        
        // 开始计算单词数量
        n = 0;
        int isInWord = 0;  // 一个标志来检查我们是否在一个单词内
        while (str[n] != '\0') {
            if (str[n] != ' ') {
                if (!isInWord) {  // 如果我们不在单词内,开始计数
                    wordCount++;
                    isInWord = 1;  // 设置标志,表示我们现在在一个单词内
                }
            } else {
                isInWord = 0;  // 如果我们遇到空格,表示单词结束,重置标志
            }
            n++;  // 移动到下一个字符
        }
        // 如果最后一个字符是单词的一部分(没有紧跟空格),增加计数
        if (isInWord) {
            wordCount++;
        }
        printf("%d", wordCount);  // 输出单词数量
        return 0;
    }
    

    在这个版本中,我们使用了 fgets 来读取字符串,这是更安全的选择。我们还增加了一个变量 isInWord 来帮助我们跟踪我们是否在一个单词内。然后,我们遍历字符串并检查每个字符。如果我们遇到空格,我们知道单词结束。如果我们不在单词内并且遇到字母或数字(即不是空格),我们知道一个新单词开始。这样我们就可以正确地计算单词的数量了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月22日
  • 已采纳回答 11月14日
  • 创建了问题 11月6日