| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2732 人关注过本帖
标题:统计字符串中单词的数量
只看楼主 加入收藏
邹峰研
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
帖 子:566
专家分: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
帖 子:566
专家分:3690
注 册:2019-7-29
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

没问题啊

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-04-14 15:23
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10541
专家分:42934
注 册: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
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册: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
快速回复:统计字符串中单词的数量
数据加载中...
 
   



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

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