в следующей небольшой программе я хочу прочитать inputString с пробелами:C++ IStream - как читать строку с пробелами
#include <string>
#include <sstream>
#include <iostream>
int main(int argc , char ** argv) {
std::string inputString(" ITEM ");
std::istringstream inputStream(inputString);
//Template:
T value;
inputStream.unsetf(std::ios::skipws);
inputStream >> value;
std::cout << "Value: [" << value << "]" << std::endl;
std::cout << "StringPos: " << inputStream.tellg() << std::endl;
std::cout << "State: " << inputStream.good() << std::endl;
}
Это производит вывод:
Value: []
StringPos: -1
State: 0
Если я удалить unsetf() я вместо этого получаю:
Value: [ITEM]
StringPos: 4
State: 1
Т.е. как и ожидалось, когда пробелы игнорируются. Итак, очевидно, что я делаю что-то не так с настройкой «Не пропустить пробелы». Какие-нибудь советы?
Редактировать: добавив шаблон-значение «T value», пример больше не компилируется; но важно, чтобы
inputStream >> value;
Работы. Следующий мета код должен работать, а также:
if is_string(T)
value = inputString; // String values are assigned directly
else
inputStream >> value; // Other types.
Йоаким
я думаю, что вы ищете 'станд :: GetLine()' – Najzero
Видимо извлекая 'string' из потока, когда «skipws» ошибочно ошибочно. – jrok