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

新手上路,请多包涵

我正在尝试制作一个接收用户输入并提取字符串中的单个单词的 C++ 程序,例如“Hello to Bob”会得到“Hello”、“to”、“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;
  }
}

但是,这只适用于字符串中遇到的第一个空格。如果单词之前有任何空格(例如,如果我们有“Hello my World”,pushBackVar 在第一个循环后将是“Hello”,然后在第二个循环之后,当我想要“Hello”和“my”时,“Hello my”。)我该如何解决这个问题?还有其他更好的方法可以从字符串中提取单个单词吗?我希望我没有让任何人感到困惑。

原文由 VVSTITAN 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 897
2 个回答

请参阅 在 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,' ');

原文由 macco 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用运算符 >> 直接到微缓冲区(字符串)来提取单词。 (不需要getline)。看看下面的函数:

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

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

    return Words;
}

原文由 TheArchitect 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏