计算c ++中特定字符串的出现次数

时间:2014-03-14 16:50:39

标签: c++ string substring

我有一个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;
} 

1 个答案:

答案 0 :(得分:2)

由于代码是机器生成的,你可以对它进行假设,这会使生活变得更加容易:例如没有注释,没有包含看起来像代码的东西的字符串,没有嵌套类等等。

这可能会让你摆脱基本的正则表达式和计数括号。 Modern C ++有内置的正则表达式,您可能需要查看函数名称之类的内容。

通常使用地图来计算出现次数(参见http://www.cplusplus.com/reference/map/map/?kw=map)。