我正在编写一些简单的c编程代码,用一个空格替换多个空格的字符串。我的代码如下,但它显然包含错误。我试图避免使用数组或指针。关于如何纠正错误的任何建议?
#include <stdio.h>
int main(void)
{
int c,d;
d=0;
while((c=getchar())!=EOF)
{
if (c==' ')
{
d=getchar();
if (d!=' '&&d!=EOF)
putchar(c);
}
putchar(c);
}
}
答案 0 :(得分:3)
在进行这种过滤时,从不重复读取输入通常是一个好主意,因为这往往会分散逻辑。至少根据我的经验,如果我在一个的地方阅读输入然后处理它,我会发现它更容易。
对于这个问题,一个简单的状态机就足够了:只记得最后一个字符是否为空白,如果读取的最后一个字符不是空白,则只输出空白。
答案 1 :(得分:2)
首先:避免使用getchar
,putchar
。请改用getc
,putc
。
如果你非常想逐个字符阅读,那么这样的事情会:
int c, lastc = '\0';
while((c = getc(stdin)) != EOF) {
if (c == ' ' && lastc == ' ')
continue;
putc(c, stdout);
lastc = c;
}
答案 2 :(得分:1)
如果您读过空白,请使用标记来记住:
#include <stdio.h>
int main( void )
{
int lastBlank = 0;
int c;
while ( (c = fgetc( stdin )) != EOF )
{
if ( c != ' ' || !lastBlank )
fputc( c, stdout );
lastBlank = ( c == ' ' );
}
return 0;
}
答案 3 :(得分:0)
此代码似乎工作正常:
#include <stdio.h>
int main(void)
{
int c, d;
d = 0;
while ((c = getchar()) != EOF)
{
if (c == ' ')
{
while ((d = getchar()) == ' ');
putchar(c);
putchar(d);
} else {
putchar(c);
}
}
}
答案 4 :(得分:0)
#include<stdio.h>
int nextChar(FILE *fp){
static int buff = 0;
int ch = fgetc(fp);
if(buff != ch)
buff = ch;
else
while(buff == ' ')
buff = fgetc(fp);
return buff;
}
int main(void){
FILE *fp = stdin;
int ch;
while(EOF!=(ch=nextChar(fp))){
putchar(ch);
}
return 0;
}
答案 5 :(得分:0)
# include <stdio.h>
int main(){
int c , n;
n=0;
while((c=getchar())!= EOF) {
if (c == '\t') {
if (n<1){
putchar('\t');
n=n+1;
}
}
else {
n=0;
putchar(c);
}
}
}
答案 6 :(得分:0)
#include <stdio.h>
/*copy input to output, replacing each
string of one or more blanks by a single blank.*/
main() {
int c;
while((c =getchar()) != EOF) {
if (c!= ' ')
putchar(c);
else {
putchar(c);
while((c =getchar()) == ' ');
putchar(c);
}
}
}
答案 7 :(得分:0)
#include <stdio.h>
int main() {
int c;
while((c = getchar()) != EOF) {
if (c != ' ')
putchar(c);
if (c == ' ') {
// if we found a blank continue reading
// searching for additional blanks
// put one blank char to output stream
// put the char that casue the while loop to exit
while((c = getchar()) == ' ');
putchar(' ');
putchar(c);
}
}
}
使用包含不同数量空白的简单文件进行测试会产生正确的行为
➜ course-c cat data
one space two spaces three spaces four spaces five spaces
➜ course-c ./replace.blank < data
one space two spaces three spaces four spaces five spaces