如何使用数组在C中用单个空格替换(多个)空白字符(空格、制表符、换行符)的所有实例?
我尝试使用getchar来解决这个问题,但现在我使用fgets逐行获取文本,整个文本存储在一个数组中。我想用一个空格替换多个空格字符的所有实例,包括空格、制表符和换行符。 这就是我使用getchar所做的:如何使用数组在C中用单个空格替换(多个)空白字符(空格、制表符、换行符)的所有实例?,c,algorithm,array-algorithms,C,Algorithm,Array Algorithms,我尝试使用getchar来解决这个问题,但现在我使用fgets逐行获取文本,整个文本存储在一个数组中。我想用一个空格替换多个空格字符的所有实例,包括空格、制表符和换行符。 这就是我使用getchar所做的: int c; while ((c = getchar ()) != EOF { if (c == '\r') continue; if (c == '\n') { putchar (c); while ((c = getcha
int c;
while ((c = getchar ()) != EOF
{
if (c == '\r') continue;
if (c == '\n') {
putchar (c);
while ((c = getchar ()) == '\n' || c == '\r') {}
if (c != EOF) ungetc (c, stdin); else break;
continue;
}
if (c == ' ' || c == '\t') {
putchar (' ');
while ((c = getchar ()) == ' ' || c == '\t') {}
if (c != EOF) ungetc(c, stdin); else break;
continue;
}
putchar (c);
}
return 0;
}
现在,我正在尝试这样做:
while (1) {
if (fgets(line,max_len, stdin) == NULL) break;
for (int i=0;i<strlen(line);i++){
text[n++]=line[i];
}
}
每个文本都存储在一个数组中,我想从中筛选它
不要重复你自己:你只需要一个getc和一个putc
在循环中,您只需要记住上一个输出的字符是否为空。
中断并继续存在是有原因的。
重写字符缓冲区的类似逻辑:
正如您所见,您不需要缓冲区,它只会使事情变得复杂。这个答案将在目标中插入一个空格,而OPs的问题是:如何将多个空格压缩为一个空格它将用一个空格替换多个空格,并保持所有其他字符不变。
int count;
for(count=0; ; ) {
int ch;
ch = getc(stdin);
if( ch == EOF) break;
switch(ch) {
case ' ':
case '\t':
case '\n':
case '\r':
if(count++) continue;
ch = ' ';
break;
default:
count=0;
break;
}
putc(ch, stdout);
}
char line[100];
while ( fgets(line,sizeof line, stdin) ) {
unsigned dst,src,count;
for (count=dst=src=0; line[dst]=line[src++];){
switch(line[dst]) {
case ' ':
case '\t':
case '\n':
case '\r':
if(count++) continue;
line[dst++] = ' ';
break;
default:
dst++;
count=0;
break;
}
}
fputs(line,stdout);
}