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_iterator
和std::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
和\n
。 std::getline
只删除 \n
,而不是 \r
。以上是关于C ++从文件中读取多行到单个字符串的主要内容,如果未能解决你的问题,请参考以下文章