拆分字符串不能正常工作c ++

时间:2014-04-16 09:20:05

标签: c++ string split istream

我只想将输入的字符串拆分为字符串向量。我有两个问题:

  1. 如果我没有在控制台中输入任何内容,则params不会为空(但它应该是)
  2. 如果我输入一个单词并在末尾添加一个空格,则该单词会被存储到params两次。
  3. 这是我的代码:

    std::string input;
    std::string buffer;
    std::vector<std::string> params;
    std::cout << "Input: " ;
    std::getline(std::cin, input);
    
    std::istringstream stream;
    stream.str(input);
    
    
    while(!(stream.eof()))
    {
      stream >> buffer;
      params.push_back(buffer);
    }
    
    // printing content of params
    
    for (int i = 0; i <params.size(); i++)
    {
      std::cout << "Params :" << params[i] << std::endl;
    }
    std::cout << params.size() << std::endl;
    

    我认为问题可能是暂时的情况。

    如果你能给我任何帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

这里的问题是你的循环从字符串流中提取字符串,而while (!stream.eof())无法正常工作。原因是,在之后尝试从流的末尾读取之后,才会设置eofbit标志。即使输入为空,这也会导致您循环遍历循环,并且您将再次迭代输入中的单词数量,将最后一个单词两次添加到向量中。

取而代之的是

while (stream >> buffer)
    params.push_back(buffer);