входной итератор пропускает пробелы, любой способ предотвратить этот пропуск

Я читаю из файла в строку, пока не достигну разделяющего символа, символа доллара. Но входной итератор пропускает пробелы, поэтому созданная строка не имеет пробелов. не то, что я хочу в этом случае. Есть ли какой-либо способ остановить поведение пропуска? и если да, то как?

вот мой тестовый код.

#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 ответов


поскольку потоки по умолчанию настроены на пропуск пробелов, поэтому используйте

noskipws(strm);

стандартные:

конструкторы basic_ios

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

Effects: создает объект класса basic_ios, присваивая начальные значения его объектам-членам, вызывая init(sb).

basic_ios();

эффекты: создает объект класса basic_ios (27.5.2.7) оставление объектов-членов неинициализированный. Объект должен быть инициализирован вызовом its init функции-члена. Если он уничтожен до того, как был уничтожен инициализированное поведение не определено.

[...]

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

постусловия: постусловия этой функции указаны в таблице 118.

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