在下面的小程序中我想用空格读取inputString:
#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
即。正如预期的那样忽略空格。所以 - 显然我做错了,不要跳过空白&#34;设置。有什么提示吗?
编辑:添加类似模板的&#34; T值&#34;该示例不再编译;
很重要inputStream >> value;
的工作原理。以下元代码也应该起作用:
if is_string(T)
value = inputString; // String values are assigned directly
else
inputStream >> value; // Other types.
乔金姆
答案 0 :(得分:3)
使用:
std::string line;
if(std::getline(inputStream, line)) {
// line contains one line from the input stream
} else {
// inputStream is empty, EOF or in error state
}