gpt4 book ai didi

从输入中删除注释的 C 函数

转载 作者:行者123 更新时间:2023-11-30 18:48:45 24 4
gpt4 key购买 nike

我是 C 语言新手,正在尝试用 C 语言编写自己的函数,以清除给定输入代码中的注释。然而,我的逻辑存在一些错误,因为结果甚至没有接近预期。

我的代码如下:

char *removeComments(char *in)
{
int i;
int multipleLineFlag = 0;
int singleLineFlag = 0;
int n = strlen(input);
char* output = malloc(n * sizeof(char));

for (i=0; i<n; i++)
{
if (in[i] == '/' && in[i+1] == '*')
{
i++;
multipleLineFlag = 1;
}
else if (multipleLineFlag == 1 && in[i] == '*' && in[i+1] == '/')
{
i++;
multipleLineFlag = 0;
}
else if (in[i] == '/' && in[i+1] == '/')
{
i++;
singleLineFlag = 1;
}
else if (singleLineFlag == 1 && in[i] == '\n')
{
singleLineFlag = 0;
}
else if (multipleLineFlag == 0 && singleLineFlag == 0)
{
out[i] = in[i];
}
i++;
}
free(in);
return out;
}

还有其他人能够在代码中找到我的错误吗?

最佳答案

您的代码的一个明显问题是这一行:

out[i] = in[i];

您需要使用 2 个不同的变量来跟踪您在输入和输出字符串中的位置,因为它们会有所不同。例如,如果输入字符串包含“foo/* test */bar”,则输出应包含“foo bar”,但您当前实际得到的是“foo [10 undefined strings] bar”。如果幸运的话,那些未定义的字符将是 NUL。

另一个问题是您没有在输出末尾添加 NUL。如果输入不包含注释,那么您将很难做到这一点,因为您没有分配足够的空间 - 因此,除了在末尾添加 NUL 之外,您还需要比当前多分配 1 个字符。

关于从输入中删除注释的 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44762512/

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