2017-10-06 37 views
1

我在C++中创建了一个记事本++插件,它在日志文件中的关键字之间进行搜索并在该关键字之间复制整个数据(该关键字在文件或根本不会发生)。 这里是我的代码[在文本文件中搜索] [在C++中的Notepad ++插件]

 std::ifstream in(curr_file_path); 
     std::string search("TEXT TO SEARCH"); 
    while (std::getline(in, line)) 
    { 
     r_val = line.find(search); 
     if (r_val != -1) 
     { 
      f_match = r_val; 
      r_val = -1; 
      while (r_val == -1) 
      { 
       std::getline(in, line); 
       r_val = line.find(search); 
       for (int i = 0; i < line.size(); i++) 
       { 
        pDestText[textLen++] = line[i]; 

       } 
      } 
      pDestText[textLen - 27] = '\0'; 
      break; 
     } 
    } 
} 

搜索要searched.Input文件中的字符串是我的查询是作为日志文件是非常大的,它需要时间约5 seconds.Can我优化这 。我正在考虑的一个优化是跳过第一个50000行代码,因为我确信我所看到的文本不会在第一个50000行中出现。但是有没有更好的优化方法。如果没有,任何人都可以告诉如何跳过第一个50000如果代码行少于50000行,则会发出错误。

+0

如果IO是瓶颈,请考虑此https://stackoverflow.com/a/4558426/7132300 – algrid

回答

0

在寻找我建议你使用,将满足您的需求

http://bigocheatsheet.com/

算法尝试看看这个链接,因为这可以帮助你在选什么。对于你将使用的算法总是有优点和缺点。你也可以结合使用两种或两种以上的算法,甚至可以自己创建,如果你认为它会比列出的更优化。