#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;
}
哪里不对吗
#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;
}
哪里不对吗
以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
你的代码里存在几个问题。首先,你定义了变量 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 来帮助我们跟踪我们是否在一个单词内。然后,我们遍历字符串并检查每个字符。如果我们遇到空格,我们知道单词结束。如果我们不在单词内并且遇到字母或数字(即不是空格),我们知道一个新单词开始。这样我们就可以正确地计算单词的数量了。