CodeRookie


私信TA

用户名:Shmily124

访问量:133699

签 名:

清风前烹茶对弈,明月下把酒言欢

等  级
排  名 14
经  验 22985
参赛次数 7
文章发表 39
年  龄 0
在职情况 学生
学  校 ZUA
专  业 计科

  自我简介:

悄悄地秃头,然后惊艳所有人?

解题思路:

输入字符串后首先要检查字符串是否为空

若非空,单词数至少为 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 人评分

  评论区

这个有点问题 比如说我故意多写空格 会多
2021-04-07 11:13:00
  • «
  • 1
  • »