我正在尝试创建一个接收用户输入的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;。)我能解决这个问题吗?还有其他更好的方法从字符串中提取单个单词吗?我希望我没有让任何人感到困惑。
答案 0 :(得分:4)
#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;
}