С++ файловый ввод/вывод. как считывать строку вместе с пробелами в конце?

139
14 июля 2019, 04:30

пишу

getline(myfile, inner);
        for (int i=0; inner[i]==' '; i++)
          startSpace++;
        for (int i=inner.size(); inner[i]==' '; i--)
          endSpace++;

но в endSpace всегда лежит 0, даже если в файле после этой строки были пробелы. чем можно скушать строку из файла вместе со всеми пробелами?

Answer 1

(В предположении, что inner - это std::string.)

Во-первых, ваш второй цикл начинает итерирование с i = inner.size(). Символ inner[i] - это всегда символ \0. Поэтому ваш второй цикл не делает никаких итераций вообще. Итерирование во втором цикле нужно начинать с inner.size() - 1, лучше всего одним из методов отсюда и с использованием беззнакового типа std::string::size_type.

Во-вторых, а что произойдет с вашим вторым циклом, если входная строка целиком состоит из пробелов? Не забывайте проверять индексы циклов на выход за пределы строки. Я не знаю, что за ответ должен выдать ваша проверка на такую строку, но наверное нет смысла итерировать вторым циклом вообще, если первый цикл прошел всю строку.

Answer 2

в endSpace всегда 0 ибо он сразу же видит не пробел, а символ '\0' строку похоже. потому и не гонит цикл дальше

for (int i=inner.size()-1; inner[i]==' '; i--)
          endSpace++;

это решило проблему

READ ALSO
NullPointerException при получении URI для файла

NullPointerException при получении URI для файла

Нужно при клике на кнопке открыть приложение камеры, сделать снимок и сохранить егоВот сам обработчик:

159
Сокеты. Прием от сервера массива данных

Сокеты. Прием от сервера массива данных

Имеется сервер который слушает команды от подключившихся клиентовПри обработке команды(запросов) клиенту отправляется массив данных

201
Добавить пункт в контекстное меню

Добавить пункт в контекстное меню

Возможно этот вопрос уже задавался, но я его так и не нашелКак добавить пункт в "глобальное" контекстное меню

188