查找目录文件中以某个关键字开头的指令个数
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <set>
using namespace std;
void dealOneLine(set<string>& iSet, string& str, char* subStr, size_t p) {
if(str.size() > 0 && str.find(subStr, p) != string::npos){
size_t pos;
pos = str.find(subStr, p);
size_t i = pos;
for( i = pos; i < str.size(); ++i){
if (str[i] == '(' || str[i] == ',') {
break;
}
}
string s = str.substr(pos, i-pos); // pos : start, i - pos : length
iSet.insert(s);
dealOneLine(iSet, str, subStr, i);
}
}
void findFileIVP(set<string>& iSet, ifstream& in, char* subStr){
string buf;
buf.clear();
while (getline(in, buf))
{
dealOneLine(iSet, buf, subStr, 0);
}
}
int main(int argc, char* argv[]) {
ifstream inf;
inf.open(argv[1]);
if (!inf.is_open()) {
std::cout << "failed to find " << argv[1] << std::endl;
}
string buf;
buf.clear();
vector<string> file_vec;
file_vec.clear();
while (getline(inf, buf))
{
file_vec.push_back(buf);
}
set<string> iSet;
iSet.clear();
for (size_t i = 0; i < file_vec.size(); i++) {
ifstream in;
in.open(file_vec[i].c_str());
if(in) {
findFileIVP(iSet, in, argv[2]);
}
in.close();
}
int count = 0;
for (auto& it : iSet) {
std::cout << it << std::endl;
count++;
}
std::cout << "以" << argv[2] << "开头的指令个数: " << count << std::endl;
inf.close();
return 0;
}
编译命令
g++ -o tt find_op.cpp -std=c++11
使用方式
./tt file_list 指令
这里的file_list保存要查找的所有文件的路径