输入迭代器跳过空格,任何防止这种跳过的方法
input iterator skipping whitespace, any way to prevent this skipping
我正在从一个文件读取到一个字符串,直到我到达一个分隔字符,即美元符号。但是输入迭代器跳过空白,所以创建的字符串没有空格。这不是我想要的有什么方法可以停止跳绳行为吗?如果是,那又是怎么回事呢?
这是我的测试代码
#include <iostream>
#include <fstream>
#include <iterator>
#include <string>
// istream iterator is skipping whitespace. How do I get all chars?
void readTo(std::istream_iterator<char> iit,
std::string& replaced)
{
while(iit != std::istream_iterator<char>()) {
char ch = *iit++;
if(ch != '$')
replaced.push_back(ch);
else
break;
}
}
int main() {
std::ifstream strm("test.txt");
std::string s;
if(strm.good()) {
readTo(strm, s);
std::cout << s << std::endl;
}
return 0;
}
由于流默认配置为跳过空白,因此,请使用
noskipws(strm);
标准:
basic_ios构造函数
explicit basic_ios(basic_streambuf<charT,traits>* sb);
效果:构造一个类basic_ios的对象,通过调用
为其成员对象赋初始值init(sb).
basic_ios();
效果:构造一个类
basic_ios
(27.5.2.7)的对象,不初始化它的成员对象。该对象应该通过调用其init
成员函数来初始化。如果它在被摧毁之前初始化行为未定义[…]
void init(basic_streambuf<charT,traits>* sb);
后置条件:该函数的后置条件如表118所示。
+----------+-------------+ | ... | ... | | flags() | skipws|dec | | ... | ... | +----------+-------------+ (Table 118)
相关文章:
- 使用迭代器替换映射中的常量项的方法
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 从基于迭代器的for循环转换后,如何在map::find()中调用方法
- 在 C++17 中实现迭代器和const_iterator的正确方法是什么?
- 编译错误 std::vector<std::shared_ptr<T>>迭代器和擦除方法
- 如何使用 SFINAE 从 end() 方法返回 (const_) 迭代器
- 如何使用迭代器作为参数方法?
- 迭代器方法无法从Const_iterator继承
- 是否有一种方法可以使用Boost Serialization序列化迭代器
- 有关使用矢量迭代器访问对象方法的问题
- 如何从内联模板方法返回通用矢量迭代器
- 初始化迭代器的最佳方法是什么?
- 无法将迭代器传递给 C++ 中的类方法
- 返回迭代器内容并将其递增的简单方法
- 实现迭代器通用方法的正确方式
- 迭代器回到递归方法的开头
- 使用矢量迭代器访问方法
- C++迭代器作为类方法中使用的类成员
- C++ 迭代器与对象与 length() 方法
- 迭代器无法访问派生类的成员方法