-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. コードには厳密な形式があり、ソース ファイル にINDENTを付けます

    インデント -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 に答える