如何在 C++ 中逐行读取多行文件?
How to read a file having multiple lines, line by line in C++?
我正在尝试读取一个包含多行的文件,其中每行都有一个单词,然后是一个 space,后跟对该单词的简短描述。
文本文件示例:
hello A type of greeting
clock A device which tells us the time
.
末尾的句号(.)表示没有更多行可读
我尝试了一种在 getline()
函数中使用定界符的方法,但只成功读取了文件的一行。我想将第一个单词(第一个 space 之前)存储在一个变量中,比如 word
,以及描述(第一个 space 之后的单词,直到遇到换行符)另一个变量,比如 desc
.
我的做法:
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
int main()
{
string filename = "text.txt" ;
ifstream file (filename);
if (!file)
{
cout<<"could not find/open file "<<filename<<"\n";
return 0;
}
string word;
string desc;
string line;
while(file){
getline(file,line,' ');
word = line;
break;
}
while(file){
getline(file,line,'\n');
desc = line;
break;
}
file.close();
cout<<word<<": ";
cout<<desc<<"\n";
return 0;
}
以上代码的输出为:
hello: A type of greeting
我尝试将另一个父 while
循环添加到上面写的那些,具有条件 file.eof()
,但是程序永远不会进入两个子循环。
你不需要多次循环,一个循环就足够了。读取一行,然后根据需要使用 std::istringstream
将其拆分。对每一行重复。
例如:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
string filename = "text.txt";
ifstream file (filename);
if (!file)
{
cout << "could not find/open file " << filename << "\n";
return 0;
}
string word;
string desc;
string line;
while (getline(file, line) && (line != ".")) {
istringstream iss(line);
iss >> word;
getline(iss, desc);
cout << word << ": " << desc << "\n";
}
return 0;
}
我正在尝试读取一个包含多行的文件,其中每行都有一个单词,然后是一个 space,后跟对该单词的简短描述。
文本文件示例:
hello A type of greeting clock A device which tells us the time .
末尾的句号(.)表示没有更多行可读
我尝试了一种在 getline()
函数中使用定界符的方法,但只成功读取了文件的一行。我想将第一个单词(第一个 space 之前)存储在一个变量中,比如 word
,以及描述(第一个 space 之后的单词,直到遇到换行符)另一个变量,比如 desc
.
我的做法:
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
int main()
{
string filename = "text.txt" ;
ifstream file (filename);
if (!file)
{
cout<<"could not find/open file "<<filename<<"\n";
return 0;
}
string word;
string desc;
string line;
while(file){
getline(file,line,' ');
word = line;
break;
}
while(file){
getline(file,line,'\n');
desc = line;
break;
}
file.close();
cout<<word<<": ";
cout<<desc<<"\n";
return 0;
}
以上代码的输出为:
hello: A type of greeting
我尝试将另一个父 while
循环添加到上面写的那些,具有条件 file.eof()
,但是程序永远不会进入两个子循环。
你不需要多次循环,一个循环就足够了。读取一行,然后根据需要使用 std::istringstream
将其拆分。对每一行重复。
例如:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
string filename = "text.txt";
ifstream file (filename);
if (!file)
{
cout << "could not find/open file " << filename << "\n";
return 0;
}
string word;
string desc;
string line;
while (getline(file, line) && (line != ".")) {
istringstream iss(line);
iss >> word;
getline(iss, desc);
cout << word << ": " << desc << "\n";
}
return 0;
}