输入迭代器跳过空格,有什么方法可以防止跳过?

8
我正在从文件中读取字符串直到遇到分隔符,即美元符号。但输入迭代器跳过空格,所以创建的字符串没有任何空格。在这种情况下,这不是我想要的。有没有办法停止跳过行为?如果有,该如何实现?
以下是我的测试代码:
#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;
}
1个回答

13

由于流默认配置为跳过空格,因此,请使用

noskipws(strm);

标准:

basic_ios 构造函数

explicit basic_ios(basic_streambuf<charT,traits>* sb);

作用:构造一个 basic_ios 类的对象,并通过调用 init(sb) 将其成员对象初始化。

basic_ios();

作用:构造一个 basic_ios 类的对象,但不对其成员对象进行初始化。必须调用它的 init 成员函数来初始化对象。 如果在对象初始化之前销毁了该对象,则其行为是未定义的。

[...]

void init(basic_streambuf<charT,traits>* sb);

后置条件:此函数的后置条件在表 118 中说明。

+----------+-------------+
| ...      | ...         |
| flags()  | skipws|dec  | 
| ...      | ...         |
+----------+-------------+
  (Table 118)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接