且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-06-28 04:27:13

/*=====================================
过滤多余的空格
总时间限制:
    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 }