gpt4 book ai didi

c - 编写代码以缩进代码

转载 作者:行者123 更新时间:2023-12-05 01:29:04 25 4
gpt4 key购买 nike

我的目标是编写一个 C 程序,缩进 char *input 中给出的 C 代码。一级缩进的样式在字符串 const char *pad 中给出。我写了下面的代码,它在我的脑海中找到了,但在实践中却没有。一定有什么地方出错了,但我找不到。另外,我不明白为什么 Valgrind 不喜欢包含 while(...) 的行。大小 1 的无效读取...

任何 { 都会将缩进级别增加一级,而任何 } 都会将缩进级别降低一级。不应用其他缩进规则。我假设字符串文字中没有大括号。

char *indent(char *input, const char *pad)
{
int lenpad = strlen(pad);
int inlen = strlen(input);
char *output = malloc(inlen+lenpad*90); //Here I'm praying +lenpad*90 is enough
int indent = 0;
int i = 0;
int j = 0;
int ndx;
int ondx;
char current = 'a';
int n;

for(ndx=ondx=0; ndx<inlen; ndx++){
current = input[ndx];
if(current == '{') indent++;
if(current == '\n'){
output[ondx++] = '\n';
n = ondx;
while(input[n] != '\n' && input[n] != '\0'){ //Trying to check if the line to come has a curly bracket.
if(input[n] == '}') //If it does, don't indent that line anymore.
indent--;
n++;
}
for(j=0; j<indent; j++){
for(i=0; i<lenpad; i++){
output[ondx++] = pad[i];
}
}
}
else{
output[ondx++] = current;
}
}
free(input);
output[ondx] = '\0';
return output;
}

代替:

int main(void) {
printf("asdfasdf\n");
while (1)
{
while (2) {
printf("printsomething\n");
}
}
}

我的代码给出:

int main(void) {
printf("asdfasdf\n");
while (1)
{
while (2) {
printf("printsomething\n");
}
}
}

最佳答案

在您尝试编写的代码美化器中,您必须:

  • 吞下(不输出)一行中的所有初始空格(在 \n 之后)
  • 将它们替换为根据 {} 的数量计算出的正确缩进>

实现它并在这里询问你是否不能让它工作

关于c - 编写代码以缩进代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30015876/

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