gpt4 book ai didi

c - 将多个空格和制表符替换为单个空白和制表符的程序

转载 作者:行者123 更新时间:2023-12-05 05:30:55 24 4
gpt4 key购买 nike

我正在阅读The C Programming Language

我已经使用这个程序将多个空格替换为单个空格,但我想同时将多个空格和制表符替换为单个空格和制表符

#include <stdio.h>

int main() {
int c;
while ((c = getchar()) != EOF) {
if (c == ' ') {
putchar(c);
while ((c = getchar()) == ' ')
;
}
if (c != ' ')
putchar(c);
}
}

最佳答案

你的程序几乎是正确的:如果文件以空格结尾,那么内循环 while ((c = getchar()) == ' '); 将停止并且文件末尾 c 的值为 EOF,它将作为字节 0xFF 输出(如果 EOF 是定义为 -1,最常见的值)。

您应该检查这种可能性:

#include <stdio.h>

int main() {
int c;
while ((c = getchar()) != EOF) {
if (c == ' ') {
putchar(c);
while ((c = getchar()) == ' ')
continue;
if (c != EOF)
break;
}
putchar(c);
}
return 0;
}

不清楚将多个空格和制表符替换为单个空格和制表符是什么意思。

要用单个空格替换空格和制表符,您只需要测试两个字节值:

#include <stdio.h>

int main() {
int c;
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\t') {
putchar(' ');
while ((c = getchar()) == ' ' || c == '\t')
continue;
if (c != EOF)
break;
}
putchar(c);
}
return 0;
}

相反,如果您打算用一个空格替换多个空格,用一个 TAB 替换多个 TAB,则可以使用不同的方法:

#include <stdio.h>

int main() {
int c, last = EOF;
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\t') {
if (c == last)
continue;
}
putchar(c);
last = c;
}
return 0;
}

此方法可用于原始问题并生成更简单的代码:

#include <stdio.h>

int main() {
int c, last = EOF;
while ((c = getchar()) != EOF) {
if (c != ' ' || c != last) {
putchar(c);
last = c;
}
}
return 0;
}

关于c - 将多个空格和制表符替换为单个空白和制表符的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74510177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com