| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2975 人关注过本帖, 1 人收藏
标题:字符数组的起始位置有空格吗?
只看楼主 加入收藏
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
结帖率:100%
收藏(1)
 问题点数:0 回复次数:20 
字符数组的起始位置有空格吗?
《C程序设计》教材里有这样一个例题(源于(第三版)P150):
输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
  下面是书中的程序:
#include <stdio.h>
void main()
{
 char string[81];
 int i,num=0,word=0;
 char c;
 gets(string);
 for (i=0;(c=string[i]) != '\0';i++)
 {
  if (c == ' ')
   word=0;
  else if (word == 0)
   {
    word=1;
    num++;
   }
}
 printf("There are %d words in the line.\n",num);
}

  下面是我自己改的程序:
#include <stdio.h>
void main()
{
 char string[81];
 int i,num=1;
 char c;
 gets(string);
 for (i=0;(c=string[i]) != '\0';i++)
 {
  if (c == ' ')
  num++;

 }
 printf("There are %d words in the line.\n",num);
}

  两个程序的区别基本都已经标出来了。我有两个问题:
1.教材的程序,一行字符的开头不统计空格;而我这个程序,因为是num初始化为1,是不是应该算作没有统计开头的空格呢??
  字符开头的空格怎么算呢??
2.教材中的程序,用word作为判别是否单词的标志——这是不是太麻烦了?
  我不用word,不也搞出来了?!!
  还是说,这个判别标志在大型程序中才能显出威力来??

[[it] 本帖最后由 YuriGagarin 于 2008-8-7 08:51 编辑 [/it]]
搜索更多相关主题的帖子: 空格 字符 位置 
2008-07-31 10:16
大风车
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-7-31
收藏
得分:0 
你好啊!
请问什么地方改变字体颜色的呢?
能不能告诉我。
2008-07-31 10:44
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
你试一下这组数据:
How   many   words     in    me?

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-07-31 10:59
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
给出一个不需要word的解决方法,不过比你课本上面的例子要慢,如果需要速度,可以把函数调用改为Hash,这样速度会很快。

#include <stdio.h>
#include <ctype.h>
int main()
{
    char str[81];
    int i,num=0;
    gets(str);
    for (i=0;str[i] != '\0';i++)
    {
        if (isalpha(str[i]) && str[i+1]!='-' && !isalpha(str[i+1]))
            num++;
    }
    printf("There are %d words in the line.\n",num);
}

[[it] 本帖最后由 StarWing83 于 2008-7-31 16:50 编辑 [/it]]

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-07-31 11:04
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
[bo][un]StarWing83[/un] 在 2008-7-31 11:04 的发言:[/bo]

给出一个不需要word的解决方法,不过比你课本上面的例子要慢,如果需要速度,可以把函数调用改为Hash,这样速度会很快。

#include
#include
int main()
{
    char str[81];
    int i,num=0;
    gets(s ...

这个代码怎么就是 Hash 呢 ??
2008-07-31 13:46
starwing
Rank: 1
等 级:新手上路
帖 子:10
专家分:3
注 册:2006-12-20
收藏
得分:0 
晕……有没有理解我说的话啊??
再给出一个Hash版本的:

#include <stdio.h>
#include <ctype.h>
int main()
{
    char str[81];
    char ap[256]={0};
    int i,num=0;

    for (i=0;i<26;i++)ap[i+'a']=ap[i+'A']=1;
    gets(str);
    for (i=0;str[i] != '\0';i++)
    {
        if (ap[(int)str[i]] && (str[i+1]=='-' || !ap[(int)str[i+1]]))
            num++;
    }
    printf("There are %d words in the line.\n",num);
    return 0;
}
2008-07-31 14:24
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
有所领悟了!

  但是,那个字符串前面的空格呢??
  它是怎么统计的??
2008-07-31 15:42
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
- -你的教材上的程序压根儿就没有统计空格的数目,它统计的是空格字符紧跟非空格字符的序偶的数目。这种方法可以避免单词之间有多个空格而引起的错误,但是这种方法有局限性,对于形如“-- -- --- - . ”的字符串,该程序会将符号和标点也算作字符。

我的程序也是统计序偶,不过是在统计一个字母紧跟一个非字母(同时也不是连字符)的序偶,对于“I am.a New-one.”这种字符串,教材程序给出的答案错误,而我的程序可以得到正确的答案。

[[it] 本帖最后由 StarWing83 于 2008-7-31 16:50 编辑 [/it]]

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-07-31 16:47
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
1.教材的程序,一行字符的开头不统计空格;而我这个程序,因为是num初始化为1,是不是应该算作没有统计开头的空格呢??
  字符开头的空格怎么算呢??


  判别标志的问题多少有些明白了。
  但是,那个“空格”问题呢??
  程序运行后,输入“I am a boy.”得到结果,两个程序都是4。
  一行开头的空格到底统计不统计啊??
2008-08-01 17:02
学不懂也要学C
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-7-3
收藏
得分:0 
那要是这样一段字符串“How many#%$^&*@!~words in me?
又要怎么样计算?
2008-08-02 17:30
快速回复:字符数组的起始位置有空格吗?
数据加载中...
 
   



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

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