【问题标题】:Counting commented characters in a random c file [duplicate]计算随机c文件中的注释字符[重复]
【发布时间】:2014-02-13 09:11:28
【问题描述】:
while((x= fgetc(p)) != EOF)
 {
  if (x== '/')
  {
      while((x = fgetc(p)) != EOF && x != '\n' && x != '/')
      {
          comments++;
      }
  }
}

基本上,我需要的只是一种计算文件中所有注释符号的方法。这是我尝试过的方法,但没有奏效。非常感谢您的帮助:)。

【问题讨论】:

  • c 中的 cmets 以 /* 开头,因此您应该寻找它而不仅仅是单个 /
  • 并以*/ 结尾。如果您不检查这两个字符,您将在每次点击除法时翻转状态,或者在字符串或注释中使用/。而且,正如 Smac89 所说,行尾与结束 C 注释无关。
  • 添加到我之前的评论中,除了it does not work,您没有提供太多信息。对此无能为力
  • 你必须使用纯 C 吗?我宁愿学习 Perl 尝试在纯 C 中可靠地执行良好的模式匹配。特别是如果您还计划匹配单行 cmets ......现在是 C 标准的一部分
  • 你能告诉我一种正确计算所有注释符号的方法吗?

标签: c


【解决方案1】:

这是一个 ruby​​ 的例子

cProg = %{#include <stdio.h>
#include <stdarg.h>
int main (int argc, char const *argv[])
\{
    printf("Hello World!");//hello world
    /* Some Multi

     Line Comment */

    return 0;

\}
}

matches = cProg.match(/\/\/.*$/)
cStyle = cProg.match(/\/\*[\s\S]*?\*\//)

print matches[0].length
print "\n"
print cStyle[0].length

编辑

刚刚看到它必须在 C.. 您将需要使用strnstr 并从连续的"/*""*/" 令牌以及"//" 到下一个"\n" 的偏移量,并减去指针以获得长度。

【讨论】:

  • 完全免责声明,我只验证了它在这个例子中有效......并且 cStyle 并不贪婪
  • 谢谢。但是您能否更具体地了解他们可以在 C 中完成的方式
  • @user3225919 你看过 strnstr() 吗?
  • 是的,但我真的不知道如何正确使用它。对不起,我是编程新手:/
猜你喜欢
  • 2020-12-18
  • 2018-04-03
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 2020-05-13
相关资源
最近更新 更多