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

简介: /*===================================== 过滤多余的空格 总时间限制: 1000ms 内存限制: 65536kB 描述 一个句子的每个单词之间也许有多个空格,过滤掉多余的空格,只留下一个空格 输入 一个字符串(长度不超过200),句子的头和尾都没有空格。
/*=====================================
过滤多余的空格
总时间限制:
    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 }

 

相关文章
|
7月前
|
算法
算法编程(二十七):千位分隔数
算法编程(二十七):千位分隔数
67 0
算法编程(二十七):千位分隔数
|
7月前
|
算法
算法编程(二十五):检查单词是否为句中其他单词的前缀
算法编程(二十五):检查单词是否为句中其他单词的前缀
64 0
|
7月前
|
算法
算法编程(二十八):重新排列单词间的空格
算法编程(二十八):重新排列单词间的空格
59 0
|
数据采集 Java 机器人
根据正则表达式截取字串符,这个办法打败99%程序员
作为一名程序员,常常会在以下情况下使用函数功能根据正则表达式截取字符串:
|
7月前
leetcode代码记录(第一个出现两次的字母
leetcode代码记录(第一个出现两次的字母
37 2
|
7月前
|
算法
leetcode代码记录(组合
leetcode代码记录(组合
25 0
|
存储 Cloud Native Go
【刷题日记】1455. 检查单词是否为句中其他单词的前缀
【刷题日记】1455. 检查单词是否为句中其他单词的前缀
108 1
c遇回车空格需谨慎--再记忆
为什么说再记忆呢...因为以前发过对scanf的探究.. [button href="https://dyedd.cn/730.html"]历史[/button] 对于字符来说,这样的输入不需要空格!
36 0
|
存储 Java 索引
1760字,让你拿捏 [‘列表‘]
1760字,让你拿捏 [‘列表‘]
|
算法
算法创作|寻找比目标字母大的最小字母问题解决方法
算法创作|寻找比目标字母大的最小字母问题解决方法
109 0