如何在 C++ 中将文件中的段落作为单个字符串读取

Posted

技术标签:

【中文标题】如何在 C++ 中将文件中的段落作为单个字符串读取【英文标题】:How to read a paragraph from file as a single string in c++ 【发布时间】:2013-11-10 17:30:42 【问题描述】:

我正在编写一个应该读取文件的 c++ 程序。如果该文件包含一组句子,比如一个段落,我将如何将整个段落作为单个字符串读取? 当我尝试对此进行编码时,我的程序只能读取第一个单词,并在看到 space 序列时停止。

例如:

如果我的句子是: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;

【问题讨论】:

张贴在这里,到目前为止你做了什么。 char line[100]; ifstream read("filename"); read.getline (line,100); 字符 b[]; ifstream inFile("file.txt", ios::in); if ( !inFile ) cerr >b; 你如何定义paragraph?一行? 您是否注意到您的代码无法编译?你应该指定一个数组的大小,或者用一个初始化列表来初始化它的内容。 【参考方案1】:

默认情况下,输入流将空格视为字符串拆分分隔符。尝试使用 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 中。我们读取输入,直到当前行为空行。

【讨论】:

我需要阅读整个段落并将其作为单个字符串存储到一个变量中......如何做到这一点......请帮助...... 任何人都知道markdown URL语法[]()有什么问题吗? @Manu343726 lo siento,没有 hablo español。 @stellarossa uups,对不起,该死的浏览器默认打开了西班牙语版本:) 谢谢康拉德,我没看到中间的空格。【参考方案2】:

假设一个段落是单行(以换行符结束)。

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;

【讨论】:

【参考方案3】:

您可以使用带有分隔符的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))

    // ...

【讨论】:

某些文件系统可能没有 EOF 字符。

以上是关于如何在 C++ 中将文件中的段落作为单个字符串读取的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将整个文件读入 std::string?

如何在单个可执行文件中将数据重定向到标准输入?

如何在Nodejs中将字符串作为读取流对象传递?

如何在Scala中将文件作为字节数组读取

如何在谷歌应用脚​​本中将段落 html 字符串转换为没有 html 标签的纯文本?

C++ linux套接字,在一次调用中将字符串数组(char**)作为连接字符串发送