входной итератор пропускает пробелы, любой способ предотвратить этот пропуск
Я читаю из файла в строку, пока не достигну разделяющего символа, символа доллара. Но входной итератор пропускает пробелы, поэтому созданная строка не имеет пробелов. не то, что я хочу в этом случае. Есть ли какой-либо способ остановить поведение пропуска? и если да, то как?
вот мой тестовый код.
#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) оставление объектов-членов неинициализированный. Объект должен быть инициализирован вызовом itsinit
функции-члена. Если он уничтожен до того, как был уничтожен инициализированное поведение не определено.[...]
void init(basic_streambuf<charT,traits>* sb);
постусловия: постусловия этой функции указаны в таблице 118.
+----------+-------------+ | ... | ... | | flags() | skipws|dec | | ... | ... | +----------+-------------+ (Table 118)