Форматированный ввод, т. Е. При использовании сдвига вправо operator>>()
по умолчанию пропускает первые пробелы.Вы можете отключить это, используя std::noskipws
, но в зависимости от того, какие вещи вы хотите прочитать, это не будет очень приятным опытом.Наилучшим подходом, вероятно, является использование неформатированного ввода, то есть что-то вроде std::getline()
и разделение строки на пробел в программе.
Если вы просто хотите посчитать, сколько раз встречался какой-либо конкретный символ, вы, вероятно, захотитеиспользуйте std::istreambuf_iterator<char>
и просто перебирайте содержимое потока (этот код также пропускает некоторые другие ненужные помехи):
for (std::istreambuf_iterator<char> it(text), end(); it != end; ++it) {
++treeNodes[*it];
}
Кстати, вы никогда не хотите использовать результат eof()
для чего-то иного, чем определение, было ли последнее чтение неудачным, потому что поток достиг своего конца.