C ++从文件中读取多行到单个字符串

Posted

技术标签:

【中文标题】C ++从文件中读取多行到单个字符串【英文标题】:C++ Reading multiple lines from a file to a single string 【发布时间】:2018-02-08 23:25:21 【问题描述】:

我有一个 dna.txt 的输入文件,如下所示。我正在尝试将所有字符读取为单个字符串,并且不允许使用字符数组。我将如何去做这件事。

cggccgattgtattctgtatagaaaaacac
atacagatggattttaactagagc
aagtcgcaataaccagcgagtattaca
cctcgaccaaatcctcgaattctc

【问题讨论】:

您可以将它们读入 std::string,可能使用 std::getline。 使用std::istreambuf_iteratorstd::string 的两个参数模板构造函数,来做这一条语句。 【参考方案1】:

尝试以下方法:

std::string dna;
std::string text_read;
while (getline(input_file, text_read))

    dna += text_read;

在上面的循环中,每一行都被读入一个单独的变量。 读取该行后,将其附加到 DNA 字符串中。

编辑 1:示例工作程序:注意:在某些平台上,缓冲区中可能存在 \r',这会导致显示时覆盖部分内容。 em>

#include <iostream>
#include <fstream>
#include <string>

int main()

    std::ifstream input_file("./data.txt");
    std::string dna;
    std::string text_read;
    while (std::getline(input_file, text_read))
    
        const std::string::size_type position = text_read.find('\r');
        if (position != std::string::npos)
        
            text_read.erase(position);
        
        dna += text_read;
    
    std::cout << "As one long string:\n"
              << dna;
    return 0;

输出:

$ ./dna.exe
As one long string:
cggccgattgtattctgtatagaaaaacacatacagatggattttaactagagcaagtcgcaataaccagcgagtattacacctcgaccaaatcctcgaattctc

文件“data.txt”:

cggccgattgtattctgtatagaaaaacac
atacagatggattttaactagagc
aagtcgcaataaccagcgagtattaca
cctcgaccaaatcctcgaattctc

在 Cygwin 终端上使用 g++ 版本 5.3.0 编译的程序。

问题是使用gdb 调试器发现的。

【讨论】:

@BrycePurnell 查看我的最新编辑。您可以通过使用调试器来发现问题。这是一个平台问题,有些人只使用\n 的行尾,而其他人同时使用\r\nstd::getline 只删除 \n,而不是 \r

以上是关于C ++从文件中读取多行到单个字符串的主要内容,如果未能解决你的问题,请参考以下文章

字符输入流读取文本文件ReaderFileReaderBufferedReader

字符流读写文本文件

c语言中从文件中按行读取字符串,并进行相应操作。

c语言 如何读取中文字符串

c语言读取文件然后保存到数组中

C语言scanf函数详解和示例