代码之家  ›  专栏  ›  技术社区  ›  user9196120

std::stringstream:寻求建议

  •  0
  • user9196120  · 技术社区  · 6 年前

    #include<iostream>
    #include <vector>
    #include <string>
    #include <sstream>
    #include <algorithm>
    
    using std::cout;
    using std::endl;
    using std::vector;
    using std::string;
    using std::stringstream;
    using std::for_each;
    
    int main (void){
    
       string s1 = "5";
       string s2 = "1 4 -1 6 0";
       vector<int> v;
       int val = 0;
    
       stringstream ss(s1);
       ss >> val;
       cout << "val: " << val << endl;
    
       ss.str(s2);
       while(val > 0){
          ss >> val;
          cout << "val: " << val << endl;
          v.push_back(val);
       }
       for_each(v.begin(), v.end(), [](int& i){cout << i << endl;});
    
       return 0;
    }
    

    编译代码时:

    g++-ggdb-std=c++14-Wall <filename.cpp>

    s1 被提取并输入到 val

    在第二种情况下,试图从 s2 并输入到 瓦尔 不起作用。 s1 因此循环无限运行。回路的测试条件,即:。, val > 0 ,其依据如下:

    参考: std::basic_istream::operator>>

    短暂性脑缺血发作

    1 回复  |  直到 6 年前
        1
  •  0
  •   bruno    6 年前

    添加 ss.clear(); 排队前 ss.str(s2); 要清除此处的错误标志,请按设置EOF ss >> val;

    val: 5
    val: 1
    val: 4
    val: -1
    1
    4
    -1