检测字符串流结束时的时间

JNe*_*ens 16 c++ string stringstream

我正在尝试编写一个函数,它将检测我几乎在字符串流的末尾,但它似乎不起作用.

这是一些代码:

std::string path(1.2.3);
int number;
std::stringstream ss(path);
while (!ss.eof()) {
    if (ss.peek() != '.') {
        ss >> number;
        if (ss.tellg() == path.length()) {
            std::cout << "Last one: " << number;
        } else {
            std::cout << number;
        }
    } else { ss.get(); }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用ss.tellg()== path.length(),但这不起作用.有人有替代方案吗?

JNe*_*ens 15

我想到了..

std::string path(1.2.3);
int number;
std::stringstream ss(path);
while (!ss.eof()) {
    if (ss.peek() != '.') {
        ss >> number;
        if (ss.tellg() == -1) {
            std::cout << "Last one: " << number;
        } else {
            std::cout << number;
        }
    } else { ss.get(); }
}
Run Code Online (Sandbox Code Playgroud)

  • 简单地做'while(ss)`会更好.EOF只是您无法再从流中读取数据的几个原因之一. (3认同)
  • 如果不了解它们可以返回的内容,则不应使用任何建议的终止条件.使用`while(ss)`的@pyon将导致在退出时读取额外的虚假值.@JNevens的ss.eof()`由于多种原因可能为0,因此我们无法确定预期的终止是循环退出的原因; 一些讨论[这里](http://stackoverflow.com/questions/14615671/whats-the-real-reason-to-not-use-the-eof-bit-as-our-stream-extraction-condition). (2认同)