一、程序思路
输入处理 :使用`gets()`函数读取一行输入(注意:`gets()`存在安全隐患,建议使用`fgets()`替代)。单词计数
遍历字符串,使用一个标志变量`word`判断是否为新单词的开始(即前一个字符是否为空格)。
当遇到空格且前一个字符不是空格时,表示一个单词结束,计数器`num`加1。
输出结果:
循环结束后输出单词总数。
二、代码实现
```c
include
int main() {
char string;
int num = 0, word = 0;
// 使用fgets读取一行输入,限制输入长度为99个字符(最后一个字符为'\0')
if (fgets(string, sizeof(string), stdin) == NULL) {
printf("输入错误\n");
return 1;
}
// 去除输入末尾的换行符(如果存在)
size_t len = strlen(string);
if (len > 0 && string[len - 1] == '\n') {
string[len - 1] = '\0';
}
// 遍历字符串统计单词
for (int i = 0; string[i] != '\0'; i++) {
if (string[i] == ' ') {
word = 0; // 遇到空格,重置单词标志
} else if (word == 0) {
num++; // 新单词开始,计数器加1
word = 1; // 设置单词标志
}
}
printf("单词数量: %d\n", num);
return 0;
}
```
三、代码说明
输入处理
使用`fgets(string, sizeof(string), stdin)`读取输入,避免缓冲区溢出。
检查输入是否成功,失败则输出错误信息并退出程序。
去除输入末尾的换行符,避免影响统计结果。
单词计数逻辑
使用`for`循环遍历字符串中的每个字符。
当遇到空格且前一个字符不是空格时,表示一个单词结束,`num`加1。
使用`word`标志位判断是否为新单词的开始。
输出结果
循环结束后,输出统计的单词数量。
四、示例运行
```
输入:Hello world this is a test
输出:单词数量: 6
```
五、注意事项
安全性:
`gets()`函数存在缓冲区溢出风险,建议使用`fgets()`替代,并限制输入长度。
输入限制:本程序限制输入长度为99个字符(最后一个字符为`'\0'`),可根据需要调整`sizeof(string)`的值。
通过上述方法,可以高效地统计输入行中以空格分隔的单词数量。