-1

我需要计算文件中函数的行数。我有以下输入。

输入:

  • 文件名,
  • 函数名

所需输出:

  • 函数中的行数

例子:

int main()
{
    line1;
    line2;
    line3;
}
int func()
{
    line1
    line2
    line3
    line4
    line5
    if(---)  //line 6
    {        //line 7
        line 8
        line 9
    }        //line10
}

所以如果我们将文件名和函数名作为“func”传递,上面的例子应该返回 10

请建议一些方法来做到这一点...

4

3 回答 3

2
  1. 代码有严格的格式,缩进你的源文件

    缩进 -kr -bap -nce -i8 -ts8 -sob -l80 -ss -bs -npsl -bl -bli0 file.c

  2. awk + ​​substr($0,1,1) 匹配 '{' 和 '}'

        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
    
于 2013-02-21T08:42:54.147 回答
0
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
于 2013-02-21T07:21:42.257 回答
0

建议以某种方式去做..

非常粗略:

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
于 2013-02-21T07:23:18.867 回答