| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2975 人关注过本帖, 1 人收藏
标题:字符数组的起始位置有空格吗?
取消只看楼主 加入收藏
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
结帖率:100%
收藏(1)
 问题点数:0 回复次数:6 
字符数组的起始位置有空格吗?
《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
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
有所领悟了!

  但是,那个字符串前面的空格呢??
  它是怎么统计的??
2008-07-31 15:42
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
1.教材的程序,一行字符的开头不统计空格;而我这个程序,因为是num初始化为1,是不是应该算作没有统计开头的空格呢??
  字符开头的空格怎么算呢??


  判别标志的问题多少有些明白了。
  但是,那个“空格”问题呢??
  程序运行后,输入“I am a boy.”得到结果,两个程序都是4。
  一行开头的空格到底统计不统计啊??
2008-08-01 17:02
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
[bo][un]YuriGagarin[/un] 在 2008-8-1 17:02 的发言:[/bo]

1.教材的程序,一行字符的开头不统计空格;而我这个程序,因为是num初始化为1,是不是应该算作没有统计开头的空格呢??
  字符开头的空格怎么算呢??

  判别标志的问题多少有些明白了。
  但是,那个“ ...


再问问!
2008-08-03 09:18
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
楼上的程序里,有很多我还没有看到,所以也不好多说什么!

  我只是想知道:
教材原程序————————————————
#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);
}

  我知道这两个都不是很健全,但为什么“num”的初值可以不同呢?!!
  教材说,“字符串的一行开头的空格不统计”,但为什么教材自己的程序就算进去了呢?!!

  我就是想知道这个问题的细节!!
2008-08-06 12:32
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
我不得不承认:自己又钻进语法细节的牛角尖里了!
想了这么久,总算明白了!
  教材原题中,“word”的初值即为0,因此,字符串开头的空格无论统计与否,都会在读取下一个空格前读取“else if”分支中的“num++”……
  丫的,又被谭浩强给忽悠了!
  教材里先是在起始陈述“一行开头的空格不统计在内”,后在表现程序运行思路的表格里算上首单词前的空格……这不是自相矛盾吗?!
  怪不得有夸他的书好,有骂他的烂了!

  我已经至少被忽悠三次了!!
2008-08-07 08:46
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
[bo][un]floats[/un] 在 2008-8-6 22:32 的发言:[/bo]


 楼主测试的时候输入“        I am a boy.”在最前面多打几个空格就会发现你的程序和书上的不同之处了


如楼上所言,不仅我的程序有问题,教材里的程序运行结果也不对了!!

  但是,唉!这已经超出我的“承受”范围了!
  几位高手的“举一反三”,需要我慢慢消化……

  谢谢各位,我所理解的问题基本解决……
2008-08-07 08:50
快速回复:字符数组的起始位置有空格吗?
数据加载中...
 
   



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

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