C++ 从.txt文件-C++;获取行/流?
我使用下面的代码读取文件,搜索给定的字符串并显示该行。但是我想把我在文件的字符串搜索中找到的内容读到下一行的C++ 从.txt文件-C++;获取行/流?,c++,string,file,stream,getline,C++,String,File,Stream,Getline,我使用下面的代码读取文件,搜索给定的字符串并显示该行。但是我想把我在文件的字符串搜索中找到的内容读到下一行的。我可以增加行号以获得下一行,但我是否需要在文件上再次使用getline 这是我的密码: #include <string> #include <iostream> #include <fstream> int main() { std::ifstream file( "data.txt" ) ; std
。我可以增加行号以获得下一行,但我是否需要在文件上再次使用getline
这是我的密码:
#include <string>
#include <iostream>
#include <fstream>
int main()
{
std::ifstream file( "data.txt" ) ;
std::string search_str = "Man" ;
std::string line ;
int line_number = 0 ;
while( std::getline( file, line ) )
{
++line_number ;
if( line.find(search_str) != std::string::npos )
{
std::cout << "line " << line_number << ": " << line << '\n' ;
std::cout << ++line_number; // read the next line too
}
}
return (0);
}
是的,您需要使用getline
函数来读取下一行
while( file && std::getline( file, line ) )
{
++line_number ;
if( line.find(search_str) != std::string::npos )
{
std::cout << "line " << line_number << ": " << line << '\n' ;
std::cout << ++line_number; // read the next line too
std::getline(file, line); // then do whatever you want.
}
}
那么就不需要检查了。是的,您需要使用getline
函数来读取下一行
while( file && std::getline( file, line ) )
{
++line_number ;
if( line.find(search_str) != std::string::npos )
{
std::cout << "line " << line_number << ": " << line << '\n' ;
std::cout << ++line_number; // read the next line too
std::getline(file, line); // then do whatever you want.
}
}
这样就不需要进行检查。您需要创建一个新的bool
标志变量,在找到匹配项时设置该变量,然后在找到匹配项后再次循环,以便获得下一行。测试标志以确定是否在上一个循环中找到了匹配项。您需要创建一个新的bool
标志变量,在找到匹配项时设置该变量,然后在找到匹配项后再次循环,以便获得下一行。测试标志以确定是否在上一个循环中找到了匹配项。您不需要另一个std::getline
调用,但需要一个标志来避免它:
#include <string>
#include <iostream>
#include <fstream>
int main()
{
std::ifstream file( "data.txt" ) ;
std::string search_str = "Man" ;
std::string line ;
int line_number = 0 ;
bool test = false;
while(std::getline(file, line))
{
++line_number;
if (test)
{
std::cout << "line " << line_number << ": " << line << '\n' ;
break;
}
if( line.find(search_str) != std::string::npos )
{
std::cout << "line " << line_number << ": " << line << '\n' ;
test = true;
}
}
return (0);
}
#包括
#包括
#包括
int main()
{
std::ifstream文件(“data.txt”);
std::string search_str=“Man”;
std::字符串行;
int line_number=0;
布尔检验=假;
while(std::getline(文件,行))
{
++线号;
如果(测试)
{
std::cout您不需要另一个std::getline
调用,但需要一个标志来避免它:
#include <string>
#include <iostream>
#include <fstream>
int main()
{
std::ifstream file( "data.txt" ) ;
std::string search_str = "Man" ;
std::string line ;
int line_number = 0 ;
bool test = false;
while(std::getline(file, line))
{
++line_number;
if (test)
{
std::cout << "line " << line_number << ": " << line << '\n' ;
break;
}
if( line.find(search_str) != std::string::npos )
{
std::cout << "line " << line_number << ": " << line << '\n' ;
test = true;
}
}
return (0);
}
#包括
#包括
#包括
int main()
{
std::ifstream文件(“data.txt”);
std::string search_str=“Man”;
std::字符串行;
int line_number=0;
布尔检验=假;
while(std::getline(文件,行))
{
++线号;
如果(测试)
{
std::我不确定你想要什么。你想只显示匹配后的下一行还是匹配行和下一行?是的,特洛伊,匹配行和紧接着的下一行…我不确定你想要什么。你想只显示匹配后的下一行还是匹配行和下一行?是的,特洛伊,匹配行和我马上下一行……在得到一些指导之后,你真的应该试着自己解决这些问题。否则你什么也学不到:看看这里:嘿,特洛伊,我用的是Zac说的以下代码,这是对的还是内存泄漏或有任何错误?-请检查这里:你真的应该尝试解决这些问题在得到一些指导后,你会自己解决问题。否则你不会学到任何东西:无论如何,请看这里:嘿,特洛伊,我正在使用Zac所说的以下代码,这是对的还是内存泄漏或有任何错误?-请检查这里:我不确定你是否意外地重用了相同的变量名,但文件
作为两个input stream和布尔标志要么不正确(因为名称冲突),要么不必要(因为getline返回ostream&
)。他可以在找到结果时,以及在下一个循环中(读取该行后)简单地设置布尔标志,测试它并中断循环。我不确定是否意外地重用了相同的变量名,但文件
,因为输入流和布尔标志要么不正确(因为名称冲突),要么不必要(因为getline返回ostream&
)。当他找到一个结果时,他只需设置一个布尔标志就可以了,在下一个循环中(读取行后),测试它并跳出循环。