栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C程序设计语言(第二版):练习1-9

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C程序设计语言(第二版):练习1-9

题目:编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格替代

自我解答:

#include 

int main()
{
   int c;
   char c_before = 'a';
   while((c = getchar()) != EOF)
   {
      if(c == ' ' && c_before == ' ')
          continue;
      putchar(c);
      c_before = c;
   }
}

实现思路:用一个变量纪录前一个字符,当前面一个字符和目前字符都是空格时,进入下一次循环,否则输出这个字符。

注意:初始化c_before为非空格的任何一个字符,如果其为空格字符,那么当输入为多个空格的情况将不会打印一个空格出来。

运行结果

     Hello     world!
 Hello world!

输入为“    Hello     world!    ”

补充(2021.10.13):

逻辑判断  c == ' ' && c_before == ' '的取反的结果是 c != ' ' || c_before != ' ' 所以上述语句可以简化为:

if( c != ' ' || c_before != ' ')
      putchar(c);

参考答案:

#include 

#define NonBLANK 'a'


int main()
{
	int c, lastc;
	
	lastc = NONBLANK;
	while((c = getchar()) != EOF)
	{
	    if(c != ' ')
            putchar(c);
        if(c == ' ')
            if(lastc != ' ')
                putchar(c);
        lastc = c;
	}
   return 0;
}

整形变量c负责记录当前输入字符的ASCII值,而整形变量lastc则记录着前一个输入字符的ASCII值。符号常量NONBLANK负责把变量lastc初始化为一个任意的非空格字符。

while循环体中的第一条if语句输出非空格字符;第二条if语句处理空格字符,而第三条if语句用于检查当前的空格字符究竟是一个单一的空格还是一串空格中的第一个空格。最后对变量lastc进行刷新。以上操作将一直重复到while循环终止(即getchar返回EOF为止)

对if-else语句的介绍最早出现于教材第14页,下面是使用了这一语法结构的实现方法:

#include 

#define NonBLANK 'a'


int main()
{
	int c, lastc;
	
	lastc = NONBLANK;
	while((c = getchar()) != EOF)
	{
	    if(c != ' ')
            putchar(c);
        else if(lastc != ' ')
            putchar(c);
        lastc = c;
	}
   return 0;
}

对逻辑或(OR)操作符||的介绍最早出现于教材第14页,下面是使用了这一知识的实现方法:

#include 

#define NonBLANK 'a'


int main()
{
	int c, lastc;
	
	lastc = NONBLANK;
	while((c = getchar()) != EOF)
	{
	    if(c != ' ' || lastc != ' ')
            putchar(c);
        lastc = c;
	}
   return 0;
}

补充

参考答案中的最后用逻辑或的形式和自我解答中的原理是一样的,本人认为自我解答中的逻辑上更好理解一些。

参考答案中的三个层次逐次递进,有了最后最简洁的形式。这种逻辑上逐次递进是在处理大型问题时值得借鉴的方法。

自我解答中的关于英文命名变量的准确度还有待提高,例如上次一个字符用lastc而不是beforec,空格的英文为blank,而不是space。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/330492.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号