我正在编写一个应该读取文件的c ++程序。如果该文件包含一组句子,比如段落,我将如何将整个段落作为单个字符串读取? 当我尝试编码时,我的程序只能读取第一个单词,当它看到空格序列时它会停止。
例如:
如果我的句子是:you are a great programmer.
应显示:you are a great programmer.
但我得到的是:you
如何对此进行编码...任何人都可以帮我一个例子吗?
这是我到目前为止所尝试的内容:
string b;
ifstream inFile( "file.txt", ios::in );
if ( !inFile ) { cerr << "File could not be opened" << endl; exit( 1 ); }
inFile>>b;
答案 0 :(得分:4)
默认情况下,输入流将空格视为字符串拆分分隔符。尝试使用std::getline()
读取直到换行符号。
要读取整个段落,您可以假设空行指定段落的结尾。所以阅读,直到你到达一个空行:
std::string read_paragraph( std::istream& is )
{
std::stringstream ss;
std::string line;
do
{
std::getline( is , line );
ss << line;
} while( line != "" )
return ss.str();
}
上面的代码逐行读取流,将当前行存储在line
并将其刷新为存储段落的std::stringstream
。我们读取输入,直到当前行为空行。
答案 1 :(得分:0)
您可以将std::getline
与分隔符一起用作EOF字符:
using std::istream::traits_type;
std::string paragraph;
char eof = traits_type::to_char_type(traits_type::eof());
if (std::getline(file, paragraph, eof))
{
// ...
}
答案 2 :(得分:0)
假设一个段落是一行(由换行符终止)。
std::ifstream file("MyData");
std::string paragraph;
std::getline(file, paragraph);
// Print the line
std::cout << paragraph;
阅读所有段落:
std::ifstream file("MyData");
std::string paragraph;
while(std::getline(file, paragraph))
{
// Print the line
std::cout << paragraph;
}