gpt4 book ai didi

c - 在 C 中将制表符扩展为空格?

转载 作者:行者123 更新时间:2023-12-04 11:17:02 25 4
gpt4 key购买 nike

我需要在输入行中展开制表符,使它们成为空格(宽度为 8 列)。我用以前的代码尝试过,我将每行中大于 10 个字符的最后一个空格替换为 '\n' 以换行。 C 中有没有一种方法可以使制表符为 8 个空格以扩展它们?我的意思是我确信这很简单,我只是似乎无法理解。

这是我的代码:

int v = 0;
int w = 0;
int tab;
extern char line[];

while (v < length) {

if(line[v] == '\t')
tab = v;

if (w == MAXCHARS) {
// THIS IS WHERE I GET STUCK
line[tab] = ' ';
// set y to 0, so loop starts over
w = 0;
}
++v;
++w;
}

最佳答案

这实际上不是关于 C 语言的问题;这是一个关于找到正确算法的问题——您可以在任何语言中使用该算法。

无论如何,如果不重新分配 line[] 以指向更大的缓冲区,你根本无法做到这一点(除非它是一个大的固定长度,在这种情况下你需要担心溢出) ;当您扩展选项卡时,您需要更多内存来存储新的、更大的行,因此您尝试进行的字符替换根本行不通。

我的建议:与其尝试就地操作(或尝试在内存中操作,甚至),我建议将其写成过滤器——一次从标准输入读取一个字符并写入标准输出;这样您就不必担心内存分配或释放或 line[] 的长度变化。

如果此代码在中使用的上下文要求它在内存中运行,请考虑实现类似于realloc() 的API,其中返回一个新指针;如果您不需要更改正在处理的字符串的长度,您可以简单地保留原始内存区域,但如果您确实需要调整它的大小,则该选项可用。

关于c - 在 C 中将制表符扩展为空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1451479/

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