从字符串c ++中提取单个单词

时间:2016-08-20 03:38:47

标签: c++ string vector

我正在尝试创建一个接收用户输入的C ++程序,并提取字符串中的单个单词,例如"鲍勃和#34;会得到"你好","到"," Bob"。最终,我将把它们推到一个字符串向量中。这是我在设计代码时尝试使用的格式:

//string libraries and all other appropriate libraries have been included above here
string UserInput;
getline(cin,UserInput)
vector<string> words;
string temp=UserInput;
string pushBackVar;//this will eventually be used to pushback words into a vector
for (int i=0;i<UserInput.length();i++)
{
  if(UserInput[i]==32)
  {
    pushBackVar=temp.erase(i,UserInput.length()-i);
    //something like words.pushback(pushBackVar) will go here;
  }  
}

然而,这仅适用于字符串中遇到的第一个空格。如果在单词之前有任何空格,则不起作用(例如,如果我们有&#34; Hello my World&#34 ;, pushBackVar将是&# 34; Hello&#34;在第一个循环之后,然后&#34;你好我的&#34;在第二个循环之后,当我想要&#34;你好&#34;和#34;我的&#34;。)我能解决这个问题吗?还有其他更好的方法从字符串中提取单个单词吗?我希望我没有让任何人感到困惑。

3 个答案:

答案 0 :(得分:4)

请参阅Split a string in C++?

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

using namespace std;

void split(const string &s, char delim, vector<string> &elems) {
    stringstream ss(s);
    string item;
    while (getline(ss, item, delim)) {
        elems.push_back(item);
    }
}


vector<string> split(const string &s, char delim) {
    vector<string> elems;
    split(s, delim, elems);
    return elems;
}

所以在你的情况下只做:

words = split(temp,' ');

答案 1 :(得分:1)

PlayerCharacterCreation()

答案 2 :(得分:0)

您可以使用运算符&gt;&gt;直接到一个microuffer(字符串)来提取单词。 (不需要getline)。看看下面的功能:

vector<string> Extract(const string& Text) {
    vector<string> Words;
    stringstream ss(Text);
    string Buf;

    while (ss >> Buf)
        Words.push_back(Buf);

    return Words;
}