我正在尝试打印修改后的用户输入,即只要用户输入中一行中有多个空格,输出将只显示一个空格。例如,如果我写
Hey, I love Stack Overflow
我希望输出为
Hey, I love Stack Overflow
我看到了一些答案,但是它们不是C语言,也没有遵循我认为可以工作的逻辑。
int c, count;
c = 0;
count = 0;
printf("Enter a string of characters, please: ");
while ((c = getchar()) != EOF)
{
if (c == ' ')
++count;
if ((count == 1) && c == ' ')
continue;
else
count--;
putchar(c);
}
但是,当我运行此代码时,输出不会删除多余的空格,只会输出完全相同的消息。
答案 0 :(得分:0)
这未经测试,但显示了我采用的方法。
int inSpace = 0;
printf("Enter a string of characters, please: ");
while ((c = getchar()) != EOF)
{
if (c == ' ')
{
if (!inSpace)
{
putchar(c);
inSpace = 1;
}
}
else
{
putchar(c);
inSpace = 0;
}
}
答案 1 :(得分:0)
您的代码非常接近。
使用count
作为标志,并设置为1
或0
而不是使用++
和--
。
#include <stdio.h>
int main ( void) {
int c = 0, count = 1;//1 to skip leading spaces
printf ( "Enter a string of characters, please: ");
while ( ( c = getchar()) != EOF) {
if ( c == ' ') {//c is a space
if ( count == 1 && c == ' ') {//skip extra spaces
continue;
}
//if count is 0 execution will fall through and putchar will be called
count = 1;//flag to skip extra spaces
}
else {//c is not a space
count = 0;//flag to print a space
}
putchar ( c);
}
return 0;
}
答案 2 :(得分:0)
将多个空格转换为一个空格
只考虑前面的字符即可。
int previous = 0;
int c;
printf("Enter a string of characters, please: ");
while ((c = getchar()) != EOF) {
if (c != ' ' || previous != ' ')
putchar(c);
}
previous = c;
}
答案 3 :(得分:-1)
做类似的事情,
`if(c==' ' && count==0)
{
puts(" ");//Number of spaces you want to print
count+=1;
continue;
}`