我有一个c ++项目来计算输入文件的LLOC,这是一个由代码生成器生成的文件,由表示为F1(),F2(),...,Fn()的函数序列组成,后跟主程序和控制结构,如if,while,do,switch等,我们应该计算:主程序+函数+分号+方程+ if语句+ switch语句+ while语句+语句。我可以很容易地计算,例如,数量;使用find函数,但我如何计算函数的数量?有没有办法计算子字符串F *(,这意味着每个以F开头并以(?
结尾的子字符串)这是我的代码来计算分号的数量:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main(int argc, char ** argv) {
ifstream testfile;
std::string stringline;
std::string str2(";");
size_t found;
int positioncount = 0;
char arry[100];
testfile.open("program.cpp");
while (!testfile.eof()) {
testfile.getline(arry, 50);
stringline = arry;
if (stringline.find(str2) != std::string::npos) {
positioncount++;
}
}
cout << "\n" << positioncount;
testfile.close();
return 0;
}
答案 0 :(得分:2)
由于代码是机器生成的,你可以对它进行假设,这会使生活变得更加容易:例如没有注释,没有包含看起来像代码的东西的字符串,没有嵌套类等等。
这可能会让你摆脱基本的正则表达式和计数括号。 Modern C ++有内置的正则表达式,您可能需要查看函数名称之类的内容。
通常使用地图来计算出现次数(参见http://www.cplusplus.com/reference/map/map/?kw=map)。