注册 登录
编程论坛 C语言论坛

统计字符串中单词的数量

邹峰研 发布于 2020-04-14 14:05, 3329 次点击
【问题描述】
输入一行字符(不多于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;
}
12 回复
#2
lin51616782020-04-14 14:10
%s遇到空白字符就停止读入了
所以一直是 1
#3
邹峰研2020-04-14 14:19
回复 2楼 lin5161678
那要用循环解决吗?
for(i=0;s[i]!='\n';i++)
        scanf("%c",&s[i]);
我将它改成了这个,也还是不行。。。。
#4
纯蓝之刃2020-04-14 14:22
把scanf("%s",s);换成gets(s);
scanf读取字符串中间不能有空格
#5
邹峰研2020-04-14 14:27
回复 4楼 纯蓝之刃
只有本站会员才能查看附件,请 登录

这个方法和楼上的一样,输出也还是 1,我现在怀疑是不是代码有问题了。。。
#6
纯蓝之刃2020-04-14 15:23
只有本站会员才能查看附件,请 登录

没问题啊
#7
吹水佬2020-04-14 15:37
#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;
}
#8
rjsp2020-04-14 15:42
所谓“单词”就是由可显示字符组成的一子字符串
那么“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……。
#9
return_02020-04-14 15:49
用字符串数组
#10
lin51616782020-04-14 16:00
#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;
}

简单点一边输入一边处理 会方便很多
#11
邹峰研2020-04-14 17:00
回复 8楼 rjsp
好像是的,谢谢提醒哈!
#12
邹峰研2020-04-14 17:14
回复 6楼 纯蓝之刃
见了鬼了。!
#13
邹峰研2020-04-14 17:14
回复 10楼 lin5161678
好的嘞,谢谢!
1