stringstream的。检测行尾

时间:2017-03-13 21:46:46

标签: c++ string stringstream

有没有办法检测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!
             ~~~~~
{...}

2 个答案:

答案 0 :(得分:1)

std::istringstreameof()方法:

  

如果关联的流已到达文件结尾,则返回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);

另见NathanOliver's Answer