编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替。

编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替。

题目来源:C程序设计语言,练习1-9.

//1.计算空格串中空格的个数,大于零输出一个空格 

#include<stdio.h>

//输入一串字符,以CTRL+Z结束输入 

main()
{
int c,num = 0;
while((c = getchar()) != EOF)
{
if (c == '\40')
++num;
else if ((c != '\40'))
{
if (num > 0)
putchar('\40');
num = 0;
putchar(c);
}
}

if (num>0)
putchar('\40');
}

//2.输出空格串的第一个空格 

#include<stdio.h>
main()
{
int c_now;
int c_last;

while((c_now = getchar()) != EOF)
{
if (c_now != '\40')
putchar(c_now);
if(c_now == '\40' && c_last != '\40')
//没有给 c_last赋初值,第一次循环只要满足 c == '\40',就可输出c。 
putchar(c_now);
c_last = c_now;
}
}


//简化语句
#include<stdio.h>
//输出空格串的第一个空格 
main()
{
int c_now;
int c_last;

while((c_now = getchar()) != EOF)
{
if (c_now == '\40' && c_last == '\40')
;
else
putchar(c_now);
c_last = c_now;
}
}


//3.//输出空格串的最后一个空格 
#include<stdio.h>
main()
{
int c_last;
int c_now;
c_now = getchar();
c_last = c_now;

while ((c_now = getchar()) != EOF)
{
if (c_last!= '\40')
putchar(c_last);
else if ((c_last== '\40') && (c_now != '\40'))
putchar(c_last);

c_last = c_now;
}
putchar(c_last);   
}

//简化语句
#include<stdio.h>
main()
{
int c_last;
int c_now;
c_now = getchar();
c_last = c_now;

while ((c_now = getchar()) != EOF)
{
if ((c_last!= '\40') || ((c_last== '\40') && (c_now != '\40'))) 
putchar(c_last);
c_last = c_now;
}
// putchar(c_now);  //输出最后一个字符 
}

第三种方法存在一个问题,按理来说循环结束时最后一位没有输出,为什么加上putchar(c_now); /putchar(c_last);  输出结果没有变化呢?




©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页