获取包含任意数量单词的字符串并将单词存储在不同的字符串变量中?

时间:2015-12-15 04:39:08

标签: c++ string

我的目标是用C ++做到这一点:
1.让用户输入包含任意数量单词的行 2.将该行分为不同的单词 3.将这些单词存储到单独的字符串变量中  

我知道我们可以使用 istringstream 对象分割字符串的单词。 但我的问题是如何将它们存储在不同的字符串变量中?。我知道无法创建字符串数组

另外,如何检测字符串流中字符串的结尾,就像文件流中的eof()标记一样?

3 个答案:

答案 0 :(得分:3)

由于您已经在使用标准库,为什么不使用矢量?

#include <iostream>
#include <sstream>
#include <vector>
#include <string>

std::string input = "abc def ghi";
std::istringstream ss(input);
std::string token;
std::vector<std::string> vec;

while(std::getline(ss, token, ' ')) {
    vec.push_back(token);
}  
//vec now contains ['abc', 'def', 'ghi']

答案 1 :(得分:1)

您有多种选择:

  1. 你可以有一个指向字符串的指针数组;但是,你需要提前知道有多少单词。 更新:正如@Blastfurnace指出的那样,这个选项容易出错,应该避免。
  2. 您可以使用vector(或任何其他container)来存储它们。
  3. 要获得可以使用while循环和提取运算符的单词,它会在到达字符串末尾时自动停止。

    示例:

    istringstream iss(str);
    string word;
    while(iss >> word) {
        /* do stuff with the word */
    }
    

答案 2 :(得分:0)

是的,我从以上各种答案和评论中得出结论后回答了我自己的问题。我将以代码的形式回答。

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string str, word;
vector<string> myVector;
getline(cin, str);
stringstream iss(str);
while(iss >> word)
     myVector.push_back(word);
}