标题:统计字符串中单词的数量
只看楼主
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
结帖率:88.89%
已结贴  问题点数:15 回复次数:12 
统计字符串中单词的数量
【问题描述】
输入一行字符(不多于80个字符),统计并输出其中的“单词”数,这里所谓“单词”就是由可显示字符组成的一子字符串,“单词”间用一个或多个空格分隔,首“单词”前和末“单词”后,可以有也可以没有空格。
【输入形式】
从键盘输入一行字符(不多于80个字符)。
【输出形式】
输出“单词”的个数。
【样例输入】
abcd  x1y2z3 qwe#$&%  789  *    end
【样例输出】
6

-----------------------我写的代码输出总是 1 ,想不通问题出在了哪里,请各位帮忙查找一下------------------------

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int WordsNum(char *p)
{
    int i,count=0,before=1;

    for(i=0;p[i]!='\0';i++)
    {
        if(!isalpha(p[i]) && isalpha(p[i+1]))  //前一个不是字母,后面的是字母
          {
              before = 1;
          }
         else
        {
            if(before)
                count++;
            before = 0;
        }
    }
    return count;
}
int main()
{
    char s[80];
    int num;

    scanf("%s",s);
    num = WordsNum(s);
    printf("%d\n",num);

    return 0;
}
搜索更多相关主题的帖子: 输出 字符 输入 int 单词 
2020-04-14 14:05
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:2 
%s遇到空白字符就停止读入了
所以一直是 1

https://zh.
2020-04-14 14:10
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
得分:0 
回复 2楼 lin5161678
那要用循环解决吗?
for(i=0;s[i]!='\n';i++)
        scanf("%c",&s[i]);
我将它改成了这个,也还是不行。。。。

今天再晚也是早,明天再早也是晚
2020-04-14 14:19
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:2 
把scanf("%s",s);换成gets(s);
scanf读取字符串中间不能有空格

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-04-14 14:22
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
得分:0 
回复 4楼 纯蓝之刃

这个方法和楼上的一样,输出也还是 1,我现在怀疑是不是代码有问题了。。。

今天再晚也是早,明天再早也是晚
2020-04-14 14:27
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:0 

没问题啊

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-04-14 15:23
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:1 
#include <stdio.h>

int main()
{
    char s[81];
    scanf("%80[^\n]", s);
    char *p=s;
    char a[81];
    int n, count=0;
    while (*p)
    {
        if (sscanf(p, "%s%n", a, &n) == 1)
        {
            printf("%s\n", a);
            ++count;
            p += n;
        }
        else
            ++p;
    }
    printf("%d\n", count);
    return 0;
}
2020-04-14 15:37
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:8 
所谓“单词”就是由可显示字符组成的一子字符串
那么“abcd  x1y2z3 qwe#$&%  789  *    end”应该是这6个字符:abcd、x1y2z3、qwe#$&%、789、*、end

if(!isalpha(p[i]) && isalpha(p[i+1]))  //前一个不是字母,后面的是字母
完全与题目要求不同,题目中根本没谈到是不是“字母”。
你对输入“abcd  x1y2z3 qwe#$&%  789  *    end”的输出差不多是:a……、x……、y……、z……、q……、e……。
2020-04-14 15:42
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
得分:1 
用字符串数组

2020-04-14 15:49
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:1 
#include <stdio.h>
int main(int argc, char *argv[])
{
    char str[100];
    char ch = 0;
    int count = 0;
    while(ch != '\n')
    {
        count += scanf("%[^ \n]", str);   
        ch = getchar();
    }
    printf("%d\n", count);
    return 0;
}

简单点一边输入一边处理 会方便很多

https://zh.
2020-04-14 16:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501039-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.172585 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved