您的位置:首页 > 其它

一个非常经典精巧的字符处理程序

2012-10-21 23:44 281 查看
最近随便翻了翻《C程序设计语言》这本书,也有了不少收获,所谓温故而知新。

看到一个练习题,很有意思,是第一章的练习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。

这样就满足了题目的要求了!

这样跟我一开始的思路比较,真是简单明了了好多!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐