C 如何计算函数中的行数
我需要计算文件中函数的行数。 我有以下输入 投入:C 如何计算函数中的行数,c,perl,C,Perl,我需要计算文件中函数的行数。 我有以下输入 投入: 文件名 函数名 所需输出: 函数中的行数 例如: int main() { line1; line2; line3; } int func() { line1 line2 line3 line4 line5 if(---) //line 6 { //line 7 line 8 line 9 }
- 文件名
- 函数名
- 函数中的行数
int main()
{
line1;
line2;
line3;
}
int func()
{
line1
line2
line3
line4
line5
if(---) //line 6
{ //line 7
line 8
line 9
} //line10
}
因此,如果我们将文件名和函数名传递为“func”,那么上面的示例应该返回10
请建议一些方法…导入系统,重新
import sys,re
if len(sys.argv)<3:
print "Usage: %s filename functionname"%(sys.argv[0])
exit(0)
f=open(sys.argv[1],"r")
func=sys.argv[2]
linec=0
braces=1
lines=f.readlines()
for i in range(len(lines)):
if re.match(".{4}"+func,lines[i]):
break
lines=[s.strip() for s in lines]
lines=[s for s in lines if len(s)!=0]
for k in lines[i+2:]:
if k=="{":
braces+=1
if k=="}":
braces-=1
if braces<=0:
break
linec+=1
print linec
if len(系统argv)
建议做这件事的方法
非常粗略地说:
a) assume this is pedantic exercise for class, so ignore tricky bits like macros
b) open "filename"
c) read file into memory
d) strstr() for "function"
e) scan until you hit "{"
f) for(bracecount=1; bracecount > 0; )
g) ++ on {, -- }, skip char constants, skip comments, keep newline count
h) print newline count
代码具有严格的格式,缩进源文件
indent-kr-bap-nce-i8-ts8-sob-l80-ss-bs-npsl-bl-bli0 file.c
awk+substr($0,1,1)匹配“{”和“}”
awk-F“,”{
if(索引(v_func,$0)我曾经尝试过使用C语言,但它看起来效率不高。有没有其他方法?比C更有效?没有,除非你是编译器开发人员几十年来一直缺少的汇编专家,或者是一位才华横溢的硬件设计师,他可以加入一个定制ASIC,以比英特尔的芯片更快地完成这项工作,尽管有很多缺点。我的意思是说,还有其他脚本吗像perl这样的语言会有帮助??除非你的代码有严格的格式,否则如果没有某种类型的语法分析器,这将很难做到。如果你知道它总是被格式化的,那么当然,perl可能是一个不错的选择。你没有问过问题。你只是介绍了规范。你的问题是什么?你遇到了什么问题?你的问题仅仅是什么“这在Perl或其他语言中更容易吗?"好的,你可以用Perl或任何语言编写一个C解析器。我不认为用任何语言都很容易。你可能想从一个现有的解析器开始,所以从寻找其中一个开始,然后选择它的语言。这个python脚本应该至少打印给定示例的代码行数,只要正是这个例子,不是一个每行有多个大括号的例子,也不是一个包含大括号的字符串/字符常量,或者…等等。真的。删除引号,然后它才有意义。不,它没有意义。没有字符串可以传递给strstrstr
来识别函数。当然,在使用pre-p的完整C解析器之前,可以创建任意复杂的示例处理器是必需的。这里的问题是:老师在寻找什么,而不是Sheldon会赞成什么。你发布的东西不是在限制范围内工作的东西。你发布的东西是永远不会工作的东西。indent
tip=awesome。这看起来很有用;我想知道你是否可以调整它以显示完整的shell脚本(我猜,指定它作为count_lines_在_func.sh file.c[func_name]中调用),并使其在没有给定函数名的情况下打印每个函数以及其中的行数。
awk -F"," '{
if( index(v_func,$0)<10 )
{
findfunc=1;
}
if( findfunc == 1)
{
if( substr($0,1,1) == "{" )
{
lineCnt=0;
}
else if(substr($0,1,1) == "}" )
{
print lineCnt;
}
else
{
lineCnt = lineCnt+1;
}
} }' v_func=$2 $1