解题思路:
输入字符串后首先要检查字符串是否为空
若非空,单词数至少为 1 ,所以可先初始化答案为 1
若字符串第 0 个字符就是结尾符,就说明字符串为空
这里我直接用了一个逻辑运算来给答案初始化:
int ans = (s[0] != '\0'); //逻辑运算对答案初始化
如果输入的字符串非空,括号中的式子为真,赋值为 1 ,否则为 0
又因为每两个单词中都有一个空格间隔
所以遍历字符串中的字符,遇到空格答案自加即可
参考代码:
#include <stdio.h> int main() { char s[101]; //定义字符串 gets(s); //输入字符串 int ans = (s[0] != '\0'); //逻辑运算对答案初始化 for (int i = 0; s[i] != '\0'; i++) //循环遍历字符串 { if (s[i] == ' ') //遇到空格答案加一 ans++; } printf("%d\n", ans); //输出答案 return 0; }
再贴一个避免多余空格干扰的代码:
#include <stdio.h> #include <string.h> int main() { char s[101]; gets(s); int begin = 0; while (s[begin] == ' ') begin++; //避免字符串前多余空格干扰 int ans = (s[begin] != '\0'); //逻辑运算初始化 int n = strlen(s); //n为字符串长度 for (int i = begin; i < n; i++) { //遍历下标 begin 到 n if (s[i] == ' ') ans++; //遇到空格答案自加 while (s[i] == ' ') i++; //跳过多余连续空格 if (s[i] == '\0') ans--; //避免字符串结尾空格干扰答案 } printf("%d\n", ans); //输出答案 return 0; }
0.0分
13 人评分
CodeRookie 2021-04-07 13:30:30 |
确实,不过题目里说了单词之间用一个空格隔开,表示肯定没有多余的空格,硬要有得话,也很好解决,在原有的for循环里加一个while循环跳过连续的空格就可以了
测试1 2021-04-07 19:11:03 |
是的刚刚看见题目-- 不好意思 但是还是判断字母更好 因为错误更低