一个非常经典精巧的字符处理程序
2012-10-21 23:44
281 查看
最近随便翻了翻《C程序设计语言》这本书,也有了不少收获,所谓温故而知新。
看到一个练习题,很有意思,是第一章的练习1-9,题目如下:
编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替。
乍看感觉不难,输入复制到输出很简单,
后一步用一个空格代替多个空格就很有意思。
我一开始思路走了死角,在想着要怎么检测出多个空格,最后也只想到了个笨方法:
就是把输入的字符先存到一个数组,然后再遍历,遇到字符就输出,遇到空格就只输出一个空格,然后后面接着的空格直接跳过,遇到字符再继续输出。
但是这样无疑效率太低,于是网上google了下看有没更好的方法。
结果果然找了一个更精简的程序,不敢私藏,发在这里跟大家一起分享。
如果遇到第一个空格,则执行else if 里的putchar(c),因为c为空格而var不为空格,然后把空格的值赋给var。
接下来有两个情况,要不继续出现空格,要不是出现其他字符。
要是出现空格,此时var的值已经是空格了,则不执行putchar(),继续把空格的值赋给var,后面如果继续出现空格也是一样的处理。
要是出现字符,则执行第一个putchar(),然后把字符赋给var。
这样就满足了题目的要求了!
这样跟我一开始的思路比较,真是简单明了了好多!
看到一个练习题,很有意思,是第一章的练习1-9,题目如下:
编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替。
乍看感觉不难,输入复制到输出很简单,
int c; while((c=getchar()!=EOF)) putcher(c);
后一步用一个空格代替多个空格就很有意思。
我一开始思路走了死角,在想着要怎么检测出多个空格,最后也只想到了个笨方法:
就是把输入的字符先存到一个数组,然后再遍历,遇到字符就输出,遇到空格就只输出一个空格,然后后面接着的空格直接跳过,遇到字符再继续输出。
但是这样无疑效率太低,于是网上google了下看有没更好的方法。
结果果然找了一个更精简的程序,不敢私藏,发在这里跟大家一起分享。
/* * ===================================================================================== * * Filename: 1.9.c * * Description: using one sapce to replace multi-space * * Version: 1.0 * Created: 10/20/2012 07:53:34 PM * Revision: none * Compiler: gcc * * Author: Citizen Paathurnax citizen2047@gmail.com * Company: GDUPT * * ===================================================================================== */ #include <stdio.h> int main(){ int c,var=0; for(;(c=getchar())!=EOF;){ if(c!=' '){ putchar(c); }else if(var!=' '){ putchar(c); } var=c; } return 0; }
如果遇到第一个空格,则执行else if 里的putchar(c),因为c为空格而var不为空格,然后把空格的值赋给var。
接下来有两个情况,要不继续出现空格,要不是出现其他字符。
要是出现空格,此时var的值已经是空格了,则不执行putchar(),继续把空格的值赋给var,后面如果继续出现空格也是一样的处理。
要是出现字符,则执行第一个putchar(),然后把字符赋给var。
这样就满足了题目的要求了!
这样跟我一开始的思路比较,真是简单明了了好多!
相关文章推荐
- 一个非常非常非常基础的程序,写的不好,但是一般的文件读写操作及字符处理函数都涉及到了..新手学习用的
- 编写程序接收一个ASCII码(从0至128),然后显示输入ASCII码所代表的字符。 注意: (1)能够对1个或多个输入的ASCII码进行处理; (2)对于输入的非ASCII码进行判定和排除。
- 练习1-24: 编写一个程序,查找C语言程序中的基本语法错误,如圆括号,方括号以及花括号不配对等。要正确的处理引号(包括单引号,双引号)~转移字符序列与注释(如果读者想把该程序编写成完全通用的程序,难度会比较大。)
- stdafx.h、stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 一个非常经典的算法查找字符串中每个字符的个数。
- stdafx.h、stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编
- 一个能够检查Windows传递给窗口消息处理程序的键盘内容和字符消息的程序
- C语言字符处理经典小程序
- C语言经典实例008:一个简单的求和程序
- 一个非常酷的WPF的抽奖程序
- 一个JavaScript处理textarea中的字符成每一行实例
- 字串处理 expr在linux中是一个功能非常强大的命令。通过学习做一个小小的总结。
- Facebook的实时流处理技术——Scuba是Facebook的一个非常快速、分布式的内存数据库,用于实时分析和查询
- 编写一个程序,输入一行字符,以回车结束,分别统计出其中的英文字母、空格、数字和其他字符的数
- python每次处理一个字符的三种方法
- 一个简单的基于socket的通讯处理程序
- 编写一个程序,使其从标准输入读取字符,直到遇到0字符(注意是0字符,不是数字)
- 一个女生写的经典程序
- string类的基本使用,编写一个字符串处理程序