OpenJudge就算概论-过滤多余的空格

/*=====================================
过滤多余的空格
总时间限制:
    1000ms
内存限制:
    65536kB
描述
    一个句子的每个单词之间也许有多个空格,过滤掉多余的空格,只留下一个空格
输入
    一个字符串(长度不超过200),句子的头和尾都没有空格。
输出
    过滤之后的句子
样例输入
    Hello      world.This is    c language.
样例输出
    Hello world.This is c language.
    
思路:
输入字符串a,用gets输入。 
用两个下标i、j分别指向数组a,a[i]是将要被移动的字符,
a[j]是将要被a[i]覆盖的单元。
开始时i、j都指向a[0]。
从左向右扫描a数组,遇到非空格字符a[i]直接复制到a[j].
遇到空格字符则看a[j]的前一个是否空格,若是空格则新
出现的空格是多余的,否则新出现的空格是需要保留的。 
======================================*/
 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     char a[205];
 6     int i,j,len;
 7     freopen("5.in","r",stdin);
 8     gets(a);
 9     len=strlen(a);
10     for(i=0,j=0;i<len;i++)//i是扫描原数组a的下标,j是调整后的下标。
11     {
12         if(a[i]!=' ')//非空格字符 
13         {
14             a[j]=a[i];
15             j++;
16         }
17         else
18         {//遇到空格 
19             if(a[j-1]!=' ')//a[j]的前一个不是空格 
20             {
21                 a[j]=a[i];
22                 j++;
23             }
24         }
25     }
26     a[j]='\0'; 
27     printf("%s\n",a);
28     return 0;
29 }

 看一个简单偷懒的实现:

 1 #include <stdio.h>
 2 int main(int argc, char *argv[])
 3 {
 4     char a[205];
 5     while(scanf("%s",a)!=EOF)
 6     {
 7         printf("%s ",a);
 8     }
 9     return 0;
10 }

 

 

posted on 2014-01-01 11:48  华山青竹  阅读(727)  评论(0编辑  收藏  举报

导航