有没有办法检测stringstream中的行尾? 我的档案:
1/2
2/3
3/4
4/5
这样的事情不起作用:
stringstream buffer;
buffer << file.rdbuf();
string str;
getline(buffer, str);
...
istringstream ss(str);
int num;
ss >> num;
if (ss.peek() == '/') //WORKS AS EXPECTED!
{...}
if(ss.peek() == '\n') //NOT WORKING! SKIPS THIS CONDITION.
{...}
警告:
if(ss.telg() == -1) //WARNED!
~~~~~
{...}
答案 0 :(得分:1)
std::istringstream
有eof()
方法:
如果关联的流已到达文件结尾,则返回true。具体而言,如果
eofbit
中设置了rdstate()
,则返回true。
string str;
istringstream ss(str);
int num;
ss >> num;
if (ss.eof()) {...}
答案 1 :(得分:0)
您可以随时使用find_first_of
:
std::string str_contents = buffer.str();
if(str_contents.find_first_of('\n') != std::string::npos) {
//contains EOL
}
find_first_of('\n')
返回EOL字符的第一个实例。如果没有,则返回(非常大的索引)std::string::npos
。如果您知道字符串中有EOL字符,则可以使用
std::string str;
std::getline(buffer, str);