【问题标题】:extract individual words from string c++从字符串c ++中提取单个单词
【发布时间】:2016-12-27 06:35:55
【问题描述】:

我正在尝试制作一个接收用户输入并提取字符串中的单个单词的 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”时。)我该如何解决这个问题?还有其他更好的方法可以从字符串中提取单个单词吗?我希望我没有让任何人感到困惑。

【问题讨论】:

标签: c++ string vector


【解决方案1】:

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,' ');

【讨论】:

  • 你可能应该引用它,但我不确定。
【解决方案2】:

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

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

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

    return Words;
}

【讨论】:

    【解决方案3】:
    #include <algorithm>        // std::(copy)
    #include <iostream>         // std::(cin, cout)
    #include <iterator>         // std::(istream_iterator, back_inserter)
    #include <sstream>          // std::(istringstream)
    #include <string>           // std::(string)
    #include <vector>           // std::(vector)
    using namespace std;
    
    auto main()
        -> int
    {
        string user_input;
        getline( cin, user_input );
        vector<string> words;
        {
            istringstream input_as_stream( user_input );
            copy(
                istream_iterator<string>( input_as_stream ),
                istream_iterator<string>(),
                back_inserter( words )
                );
        }
    
        for( string const& word : words )
        {
            cout << word << '\n';
        }
    }
    

    【讨论】:

      【解决方案4】:

      在这里,我从句子中创建了一个单词向量。

      #include<bits/stdc++.h>
      using namespace std;
      int main(){
      string s = "the devil in the s";
      string word;
      vector<string> v;
      for(int i=0; i<s.length(); i++){
          if(s[i]!=' '){
              word+=s[i];
          }
          else{
              v.push_back(word);
              if(i<s.length()+1)
                  word.clear();
          }  
      }
      v.push_back(word);
      for(auto i:v){
          cout<<i<<endl;
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-09-10
        • 1970-01-01
        • 2012-04-13
        • 1970-01-01
        • 2021-03-15
        • 1970-01-01
        • 1970-01-01
        • 2015-05-08
        • 1970-01-01
        相关资源
        最近更新 更多