gpt4 book ai didi

删除注释的C程序

转载 作者:行者123 更新时间:2023-11-30 17:28:55 25 4
gpt4 key购买 nike

这是我第一次发帖,因此对于格式不当和/或任何不合理的问题,我深表歉意。

所以我已经在“删除评论”程序上工作了一段时间,并取得了进展,但进展甚微。我是 C 新手,所以我使用一些基本函数和技能来编写它。代码的输入文件不需要读取任何函数,而是使用终端中的 < 传递给程序。

我正在使用的文本文件包含以下内容:

some/* crazy */stuff
some/* crazy */ stuff
some/*crazy /*crazy*/*/stuff
"some /* crazy */ stuff "
some/* "crazy" */ stuff
some/* crazy stuff

测试不同的评论格式。到目前为止我的代码是:

#include <stdio.h>
#define IN_COMMENT 1

int main(int argc, char **argv)
{
int c;

while ((c=getchar())!=EOF)
{
if(c=='/'&&getchar()=='*')
{
while(c!='*' && getchar()!='/')
{
c = " ";
c= getchar();

}

}


if(c=='"')
{
c=getchar();
while(c!='"')
{
putchar(c);
c=getchar();
}
putchar(c);
}
}
putchar(c);
printf("done.\n");
return 0;
}

问题是,我无法找到一种方法来设置一个条件,当出现评论已启动但从未关闭的情况时,该条件会打印出错误消息,例如(一些/*疯狂的东西)

另一个问题是我似乎找不到当我运行程序并输入文本文件时省略 * 的错误,所以当我输入时:

some/* crazy */stuff
some/* crazy */ stuff
some/*crazy /*crazy*/*/stuff
"some /* crazy */ stuff "
some/* "crazy" */ stuff

我最终得到以下结果: 一些*东西

some* stuff 

some**/tuff

"some /* crazy */ stuff "

some* stuff

我无法找到解决这两个问题的方法。教授提出了一种通过定义不同状态来编写程序的不同方法,但当我尝试时,结果更加令人困惑。

最佳答案

您的描述重点是在流上操作和在缓冲区上操作之间的区别。在 C 和 Java 中,任何一种技术都是可能的。

在这里,您的任务是在流情况下完成工作,即您不能“向前看”,也不能“向后写” - 您所能做的就是检索下一个字符,更新一些变量(如果适用),并决定是否或不输出该字符。

这称为状态机;您的主循环将读取一个字符,然后根据变量所处的状态采取不同的操作。

要开始使用,您至少需要存储以下内容:

  • 无论您是否发表评论
  • 如果您没有发表评论,那么您是否只是阅读了 /

例如,如果设置了后一个状态并且您得到一个'*',那么您将设置前一个状态(并重置后者)。

关于删除注释的C程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25860644/

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