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

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

cggccgattgtattctgtatagaaaaacac
atacagatggattttaactagagc
aagtcgcaataaccagcgagtattaca
cctcgaccaaatcctcgaattctc

【问题讨论】:

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

标签: c++ string file file-io


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多