输入迭代器跳过空格,任何防止这种跳过的方法

input iterator skipping whitespace, any way to prevent this skipping

本文关键字:方法 迭代器 空格 输入 任何防      更新时间:2023-10-16

我正在从一个文件读取到一个字符串,直到我到达一个分隔字符,即美元符号。但是输入迭代器跳过空白,所以创建的字符串没有空格。这不是我想要的有什么方法可以停止跳绳行为吗?如果是,那又是怎么回事呢?

这是我的测试代码

#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)