【C语言及程序设计】项目1-36-3:消除多余的空格

问题描述:从键盘上的输入一句话,直到按回车键为止,这些字符被原样输出,但若有连续的一个以上的空格时只输出一个空格。
例如,输入:I   am     a            teacher.,输出I am a teacher.

笔者的code:

 1 #include "stdafx.h"
 2
 3 int main()
 4 {
 5     char c(‘\0‘), m(‘\0‘);
 6
 7     do
 8     {
 9         c = getchar();
10         if ( (m == ‘ ‘) && (c == ‘ ‘))
11         {
12             putchar(‘\b‘);
13         }
14         putchar(c);
15         m = c;
16
17     } while (c != ‘\n‘);
18
19     return 0;
20 }

老师的code:

 1 #include <stdio.h>
 2 int main( )
 3 {
 4     char c, frontIsSpace=0;  //frontIsSpace用于记忆前面的符号是否为空格,是空格,值为1,不为空格,为0
 5     while ((c=getchar())!=‘\n‘)
 6     {
 7         if (c!=‘ ‘)
 8         {
 9             frontIsSpace=0;   //在读入下一个字符后,当前的字符,就是下一次所谓前一个,其值不是空格,故赋值为0
10             putchar(c) ;
11         }
12         else if (frontIsSpace==0)  //如果前一个不是空格,当前的这个空格是要输出的
13         {
14             putchar(c);   //输出的是空格
15             frontIsSpace=1;   //在读入下一个字符后,就需要知道,当前的字符,也就是下一次所谓前一个,其值是空格,故赋值为1
16         }
17     }
18     return 0;
19 }  

感想:

这道题第一次做,干想是很困难的。这个时候就可以写“伪代码”或画流程图,不要嫌麻烦,其实可以大大提高效率。比如本题在写代码之前就可以,写个伪代码:

输入字符》利用中间变量判断前一个字符是否为space》

1. 是:输出退格

2. 否:输出字符(数据处理)

》将字符存储至中间变量 》返回循环

=

原文地址:https://www.cnblogs.com/miyazakehime/p/9130133.html

时间: 2024-11-10 16:23:09

【C语言及程序设计】项目1-36-3:消除多余的空格的相关文章

C语言零基础项目驱动式学习第一天

引言: 智能手机(Smart Phone)是一种运算能力及功能比传统手机更强的手机.目前的操作系统基本上有以下几种: 1. Symbian Os 众所周知塞班隶属于NOKIA,Symbian开发之初的目标是保证在较低资源的设备上能长时间的运行,这导致了塞班的应用程序开发有着较为陡峭的学习路线,开发成本高,但是程序的运行的效率很高> 2.Android 开源, 联盟,Android凝聚了几乎遍布全球的力量,这是Android形象及声音能够被传到全球移动互联网市场每一个角落的根本原因.不过, 1).

iOS开发项目篇—36封装微博业务

iOS开发项目篇—36封装微博业务 一.简单说明 1.请求参数面向模型 2.请求结果面向模型 3.对控制器来说应该屏蔽业务细节.不让控制器关心(知道)业务细节,它只需要知道自己在做某个业务 @通过一个专门的业务处理类:处理微博业务细节 说明: 业务:加载新的微博首页数据 实现:给新浪服务器发送一个GET请求 业务:加载更多的首页微博数据 实现1:给新浪服务器发送一个GET请求 实现2:去沙盒中加载以前离线缓存的微博数据  二.实现 1.新建一个微博业务处理类,继承自NSObject 微博业务处理

C语言零基础项目驱动式学习第四天

//类型修饰符  数组名[数组元素个数] = {初始化}; //定义数组的时候[]中必须是常量表达式, 不可以是变量; /* int age[5] = {21, 18, 25, 20, 18}; int array[10] = {0};//代表数组中有10个元素, 每个都是0; int array1[8] = {1};//代表数组中有8个元素,第一个是1,其余的为0; int age2[2 + 3] = {0}; */ //定义数组和使用数组的最大区别是, 前面是否有类型修饰符 //使用数组元素

C语言零基础项目驱动式学习第二天

//BOOL 类型是一种非真即假的数据类型,取值只有YES和NO, //BOOL 其实是OC中得数据类型,在C语言中,认为非0即为真. //BOOL 类型规定的存储空间为一个字节. //    BOOL a = YES; //    BOOL b = NO; //    printf("a = %d, b = %d\n", a, b); //    int a = 15, b = 18; //    BOOL c = a > b; //    printf("c = %

C语言零基础项目驱动式学习第三天

一 while循环二do   while循环三 for循环for循环的执行顺序用如下表达式: for(expression1;expression2;expression3)        循环变量初值; 循环条件; 循环变量增量  {                expression4; }       执行的顺序应该是: 1)第一次循环,即初始化循环.      首先执行表达式expression1(一般为初始化语句):再执行expression2(一般为条件判断语句),判断express

WinForm多语言版本实战项目演练

一.课程介绍 关于如何实现"WinForm多语言版本"网上有很多实现技术方案,可以说是"琳琅满目","包罗万象".俗话说的好:一千个读者就有一千个哈姆雷特!如果您工作中恰好也遇到这种开发需求,但是为了一个自上手简单.维护方便.扩展性强的WinForm多语言版本技术方案而感到烦恼的话,那么很高兴恭喜你看到了阿笨的本次分享课程:阿笨结合的是自己在实际工作中遇到真实项目案例,特别的总结并且分享出来给大家,从而避免重复造轮子这种事情. 如果您对本次分享&

第四周《C语言及程序设计》实践项目26 实现线性表基本操作的函数

[项目1-有序数组中插入数据(函数版)] /* * Copyright (c) 2016, CSDN学院 * All rights reserved. * 文件名称:[项目1-有序数组中插入数据(函数版)].cpp * 作 者:张易安 * 完成日期:2016年 9 月 9 日 * 版 本 号:v1.0 * * 问题描述: 有一个足够"大"的数组a,其中已经存储了n个呈升序排列的数据.调用函数insert(a, n, m), * 可以将数m插入到a中的合适位置,使其仍然保持升序,并且返回

【C语言及程序设计】项目1-26-2&amp;3&amp;5:成绩等级 &amp; 分段函数求值switch语句版 &amp; 个人所得税计算器switch语句版

switch语句常用于解决多分支.分段问题,该语句的关键就在于将具体问题中的分段.分支条件转化为常量constant. 首先,一定要理解switch语句是如何执行的: 项目1-26-2:成绩等级 1 /* 成绩等级(switch).cpp: 2 问题描述:给出一百分制成绩,要求输出成绩等级'A','B','C','D','E'.90分以上为'A',80-89分为'B',70-79分为'C',60-69分为'D',60分以下为'E'. 3 */ 4 5 #include "stdafx.h&quo

C语言及程序设计 实践项目——C语言程序初体验

[项目1-输出点阵图] 编一个程序,用你的姓名读音首字母,组成类似的趣图 提示:printf("--\n");语句会输出双引号中的内容,'\n'完成换行[参考解答] [项目2-完成简单计算] (1)编程序,输入长方形的两边长a和b,输出长方形的周长和面积 提示:边长可以是整数也可以是小数:实现乘法的运算符是*[参考解答] (2)编程序,输入两个电阻R1和R2的阻值,求它们并联后的阻值R 提示:计算公式为r=1/(1/r1+1/r2)):电阻值为浮点数[参考解答] (3)输入摄氏温度值(