题目:编辑一个程序,把输入复制到输出,如果输入过程中有连续多个空格相连,则只输出一个空格!以下是我写出的五个程序,当然有zotin的点拨,更多的是自己的思考!希望能对像我一样的初学者一定的思考。
方法一:
#include<stdio.h>
#include<string.h>
main()
{
long int c;
int i=0,t;
char a[80];
int firstSpace = 1;
c=getchar();
while(c!=EOF)
{
if(c==' '&&firstSpace)
{
a[i++]=c;firstSpace=0;
}
if(c!=' ')
{
a[i++]=c;firstSpace=1;
}
c=getchar();
}
a[i] = '\0';
puts(a);
getch();
}
方法二:
#include<stdio.h>
#include<string.h>
main()
{
long int c;
int i=0,t;
char a[80];
int firstSpace = 1;
c=getchar();
while(c!=EOF)
{
if (c != ' '||firstSpace
)/* c不是空格则赋值到数组元素中,如果是空格,
则看firstSpace是不是真,是真说明是第一个空格,同样地赋值到数组中,
如果不是真说明不是第一个空格,则忽略不记 */
{
a[i]=c;
i++;
firstSpace = 0;/* 这里当c不是空格也把firtspace设为0,是不合理的 */
}
if(c != ' ') /*当c不是空格时,firstSpace置1,这样做的目的是当时遇到下一个空格,
那么这个空格就是第一个空格
*/
{
firstSpace = 1;
}
c=getchar();
}
a[i] = '\0';
puts(a);
getch();
}
方法三#include<stdio.h>
#include<string.h>
main() {
long int c;
int i=0;
char a[80],*q,*p;
c=getchar();
while(c!=EOF)
{
a[i]=c;
i++;
c=getchar();
}
a[i]='\0';/* 把字符串输入到数组a中 */
/* 程序思想:程序从头往后测试字符串的每一个字符,a不是空格则跳过;b当遇到空格,
则再判断紧接这个空格后的字符是不是空格,c如果是,则把这第一个空格后的字符串整体前移,以替换掉空格
,d然后再判断紧接后面是不是空格,是,则再移,如果不是,继续往后测试,重复abcd */
?
q=a; /* 把a的地址赋值给指针p */
while(*q!='\0')
{
while(*q!=' ')q++;/* 跳过前面的字符,除空格 */
while(*q==' '&&*(q+1)==' ')/* 判断是否有两个空格相连,如果有,则执行循环体 */
{
p=q+1;
while(*p!='\0')
{
*p=*(p+1);
p++;
}/* 整体顺序前移第二个格后的字符串*/
}/* 当移动后如果第一个字符不是空格,则终止循环 */
q++;
}
puts(a);
getch();
}
方法四:
#include<stdio.h>
#include<string.h>
liuonespace(char *p)
{
char b[80];
int i,j=0,firtspace=1;/* 设置空格标志,首先赋初值1 */
for(i=0;p[i]!='\0';i++)
{
if(p[i]!=' '||firtspace) /* 首次不管是遇到空格还是其它都能运行下面的语句 */
{
b[j++]=p[i];/*
*/
firtspace=0;
}
if(p[i]!=' ')
{
firtspace=1;
}
}
/* 循环终止条件是遇到字符串结束符 */
b[j]='\0'; /* 放置字符串结束标志 */
strcpy(p,b);/* 复制字符串,从b到p,也就是从b到a */
}
main()
{
long int c;
char a[80];
int i=0;
c=getchar();
while(c!=EOF)
{
a[i]=c;
i++;
c=getchar();
}
a[i]='\0';/* 从键盘输入字符串到数组a中 */
puts(a);
puts(liuonespace(a));
getch();
}
方法五:
#include<stdio.h>
#include<string.h>
main()
{
long int c;
int i,j,space;
char a[80],b[80];
i=0;
c=getchar();
while(c!=EOF)
{
a[i]=c;
i++;
c=getchar();
}
a[i]='\0';
j=0;space=1;
for(i=0;a[i]!='\0';i++)
{
if(a[i]==' '&&space)
{
b[j++]=a[i];
space=0;
}
if(a[i]!=' ')
{
b[j++]=a[i];
space=1;
}
}
b[j]='\0';
puts(b);
getch();
}