查找目录文件中以某个关键字开头的指令个数

#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保存要查找的所有文件的路径

posted @ 2020-09-23 10:20  cyssmile  阅读(217)  评论(0编辑  收藏  举报