C++使用迭代器复制文本文件
C++ copying text files with iterators
我刚刚找到了一种将带有迭代器的文件复制到另一个文件的方法:
ifstream ifile("file1.txt");
ofstream ofile("file2.txt");
copy(istream_iterator<string>(ifile),
istream_iterator<string>(),
ostream_iterator<string>(ofile, " "));
它是有效的,但不幸的是,"file1.txt"中的所有文本在"file2.txt"中只有一行,但在"file1.txt"中有很多行。
我试图在迭代器的循环之间更改字符串:
copy(istream_iterator<string>(ifile),
istream_iterator<string>(),
ostream_iterator<string>(ofile, "n"));
但"file2.txt"的结果更糟——每个单词都在不同的行中。
我的问题:有没有任何方法可以用迭代器复制文件,但不会丢失任何信息,或者我应该用getline()
来做?
istream_iterator<T> iter(stream)
将使用格式化的输入函数,因此++iter
在某种程度上等效于:
T t;
stream >> t;
对于string
对象,这意味着丢弃任何前导空白,只读取到下一个空白字符。
如果要使用未格式化的操作,请使用istreambuf_iterator<char>
(如注释中所述)。
使用迭代器和std::getline()
:的可能解决方案
#include <iostream>
#include <string>
#include <iterator>
#include <fstream>
#include <algorithm>
// Define a struct and operator>> for reading lines.
//
struct line
{
std::string buf;
operator std::string() const { return buf; }
};
std::istream& operator>>(std::istream& a_in, line& a_line)
{
return std::getline(a_in, a_line.buf);
}
int main()
{
std::ifstream in("main.cpp");
std::ofstream out("copy.cpp");
std::copy(std::istream_iterator<line>(in),
std::istream_iterator<line>(),
std::ostream_iterator<std::string>(out, "n"));
return 0;
}
取消设置ifstream上的跳过空白标记。
ifile.unsetf(ios_base::skipws);
请参阅http://en.cppreference.com/w/cpp/io/ios_base/unsetf.
相关文章:
- 文本文件中的单词链表
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- C++试图读取一个文件并输出到另一个文本文件
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 已修改的LinkedList未在文本文件本身中更新
- C++文本文件的获取线
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- 打印逐行存储的文本文件
- C++文本文件输入