0

我正在编写一个应该读取文件的 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;
4

3 回答 3

4

默认情况下,输入流将空格视为字符串拆分分隔符。尝试使用std::getline()which 读取直到换行符。

要阅读整个段落,您可以假设空行指定段落的结尾。所以阅读直到你到达一个空行:

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存储段落的 a 中。我们读取输入,直到当前行为空行。

于 2013-11-10T17:32:53.267 回答
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))
{
    // ...
}
于 2013-11-10T17:44:02.800 回答
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;
}
于 2013-11-10T17:48:15.330 回答