我正在打开一个文件并在一行中搜索关键字。 如果找到该关键字,我会继续从文件中读取行,直到我在文件中找到相同的关键字。它在大多数情况下都有效。但在一种情况下,它无法正常工作。此行
::MessageBox(NULL, TEXT("here -2"), TEXT(""), MB_OK);
当我检查时,永远不会被执行。我认为find函数从未在查找中取得成功。我怀疑getline()函数。我看的文本存在于文件中,它是带有空格的字符串[Like" AB CD EF"]。它作为第一个图案存在于行上,行在此文本之前没有空格。可以任何人提出我在做什么错。我是C ++的新手。这是我的代码。
std::ifstream in(curr_file_path);
std::string search("SEARCH");
std::string line;
char *pDestText = new char[8000*256+1];
int f_match = -1;
int l_match = -1;
int r_val=0;
int textLen = 0;
int flag = 0;
while (std::getline(in, line))
{
r_val = line.find(search);
if (r_val!=(std::string::npos))
{
::MessageBox(NULL, TEXT("here -2"), TEXT(""), MB_OK);
f_match = r_val;
while (std::getline(in, line))
{
::MessageBox(NULL, TEXT("here -3"), TEXT(""), MB_OK);
r_val = line.find(search);
if (r_val != std::string::npos)
{
l_match = r_val;
break;
}
else
{
::MessageBox(NULL, TEXT("here -4"), TEXT(""), MB_OK);
for (int i = 0; i < line.size(); i++)
{
pDestText[textLen++] = line[i];
}
}
}
::MessageBox(NULL, TEXT("here -5"), TEXT(""), MB_OK);
for (int i = 0; i < r_val; i++)
{
//if(line[i]!='=')
::MessageBox(NULL, TEXT("here -6"), TEXT(""), MB_OK);
pDestText[textLen++] = line[i];
}
//pDestText[textLen] = '\0';
::MessageBox(NULL, TEXT("here -7"), TEXT(""), MB_OK);
break;
}
}
in.close();
答案 0 :(得分:0)
我喜欢用干净的方式向人们展示标准的C ++。
<强> Live On Coliru 强>
#include <fstream>
#include <string>
#include <iostream>
#include <iterator>
#include <sstream>
// start SEARCH block
bool filter_lines(std::istream& haystack, std::string const& needle, std::ostream& dest) {
bool active = false;
std::string line;
auto trigger = [&] {
bool match = std::string::npos != line.find(needle);
if (match)
active = !active;
return match;
};
auto act = [&] { if (active) dest << line << "\n"; };
while (getline(haystack, line))
if (!trigger())
act();
return active;
}
int main() {
std::ifstream ifs("main.cpp");
std::stringstream destText;
if (filter_lines(ifs, "SEARCH", destText))
std::cerr << "Warning: last delimited block unclosed\n";
std::cout << "------------- FILTERED -----------\n"
<< destText.rdbuf()
<< "----------------------------------\n";
}
¹我意识到我可能无法解决确切的问题,但我觉得这种答案通常更有益。使用调试器查找自己的错误的建设性意见也是如此