| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1594 人关注过本帖
标题:请教首尾可能为空时查询单词的问题
只看楼主 加入收藏
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
 问题点数:0 回复次数:10 
请教首尾可能为空时查询单词的问题

我希望可以做出一个输入字符串统计单词数量的程序。。。但是问题好多啊。这个程序正常使用没有问题。。。即使单词之间空格数不是1都行。但是问题在于万一有人就只输入空格键或者直接回车键出的也是一怎么办?而且末尾字符不能是空格不然会结果会加一,我希望不管首尾是否为空格都能正确计算出单词的数量。但目前做的其实只能统计不连续的空格数量并输出。求指导!
#include<stdio.h>
#include<string.h>
#define A 888
main()
{
    int a,b,c=1,d,e=0,f,g;
char one[A];
gets (one);
a=strlen(one);
for (b=1;b<a;
b++){
if (one[b]==' '&&one[b-1]!=' '){
c++;}}
printf("%d",c);
}
还有个问题是我试了下当末尾字符为空格时让结果c-1,结果完全无效。。。我的写法是这样的,请问为什么不起作用?
#include<stdio.h>
#include<string.h>
#define A 888
main()
{
    int a,b,c=1,d,e=0,f,g;
char one[A];
gets (one);
a=strlen(one);
for (b=1;b<a;
b++){
if (one[b]==' '&&one[b-1]!=' '){
c++;}}
if (one[a]==' '){c=c-1;}
printf("%d",c);
}

[此贴子已经被作者于2016-11-13 19:23编辑过]

搜索更多相关主题的帖子: include 字符串 单词 而且 
2016-11-13 19:04
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
if (one[a]==' '){c=c-1;}此时one[a]为结束符号'\0';正确改为if (one[a-1]==' '){c=c-1;}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-13 22:50
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
回复 2楼 九转星河
dalao,按照您的纠正确实回避了字符串末位为空格时统计数量会多一的问题,但是我后来加了一句
if (one[0]=='\0'){c=c-1;}希望解决直接回车显示结果是1的问题。结果没有用。。。if (a==0){c=c-1;}也一样,请问这又是为什么呢?直接回车时one[0]应该就是'\0'吧。
#include<stdio.h>
#include<string.h>
#define A 888
main()
{
    int a,b,c=1,d,e=0,f,g;
char one[A];
gets (one);
a=strlen(one);
for (b=1;b<a;
b++){
if (one[b]==' '&&one[b-1]!=' '){
c++;}}
if (one[a-1]==' '){c=c-1;}
if (one[0]=='\0'){c=c-1;}
printf("%d",c);
}
这应该就是这个统计单词数量的程序最后的问题了,有点兴奋啊

[此贴子已经被作者于2016-11-13 23:59编辑过]


碧蓝航线真好玩
2016-11-13 23:58
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
你的代码没错啊,直接按回车结果为0,再去试试~
图片附件: 游客没有浏览图片的权限,请 登录注册

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-14 00:26
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
回复 4楼 九转星河
是吗,会不会和我用的编译器有关系??我不是用vc6.0用的C4Droid......感谢dalao!

碧蓝航线真好玩
2016-11-14 06:15
夏天的飞鸟
Rank: 2
来 自:海底两万里
等 级:论坛游民
威 望:1
帖 子:24
专家分:70
注 册:2016-11-4
收藏
得分:0 
程序代码:
    #include<stdio.h>
#include<string.h>
#define A 888
int main()
{
    int a, b = 0, c = 0,e = 0;
    char one[A];
    gets_s(one);
    a = strlen(one);

    while (one[b] != '\0')
    {
        if (one[b] == ' ' && one[b + 1] != ' ') { c++; }

        b++;
    }

    printf("c = %d\n", c);

}

2016-11-14 09:11
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
变量c初始化0,不是初始化1
2016-11-14 09:16
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:0 
回复 7楼 linlulu001
经过测试,c初始化是1是对的

早知做人那么辛苦!  当初不应该下凡
2016-11-14 13:12
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 5楼 y529879803
嗯,我用C4编译也是遇到这个问题,把'\0'改为'\n'就没问题了。这个与编译器有关的问题~不太好说……

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-14 13:17
夏天的飞鸟
Rank: 2
来 自:海底两万里
等 级:论坛游民
威 望:1
帖 子:24
专家分:70
注 册:2016-11-4
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<string.h>
#define A 888
int main()
{
    int a, b = 0, c = 0,e = 0;
    char one[A];
    gets_s(one);

    if (one[b] == '\0')
    {
        printf("c = %d", c);
        return 0;
    }
    
    while (one[b] != '\0')
    {
        if (one[b] == ' ' && one[b + 1] != ' ' && one[b + 1] != '\0') 
        {
            c++; 
        }

        b++;
    }
    c++;
    printf("c = %d\n", c);

    return 0;

}


刚才那个有bug
2016-11-14 13:18
快速回复:请教首尾可能为空时查询单词的问题
数据加载中...
 
   



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

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