2016-08-20 23 views
2

私はユーザー入力を受け取り、文字列中の個々の単語を抽出するC++プログラムを作ろうとしています。 "Hello to Bob"は "Hello"、 "to"、 "Bob"を取得します。最終的には、これらを文字列ベクトルにプッシュします。これは、コードを設計するときに、私が使用しようとしたフォーマットである:文字列C++から個々の単語を抽出

//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; 
    } 
} 

単語の前にスペースがある場合は、string.Itに遭遇した最初のスペースのために、この唯一の作品は動作しません(たとえば、我々場合"こんにちは"と "私"が必要なときに、 "Hello my world"を持っていれば、pushBackVarは最初のループの後に "Hello"になり、2番目のループの後に "Hello my"になります。文字列から個々の単語を抽出する他の良い方法はありますか?私は誰もが混乱していないことを願っています。 >>

words = split(temp,' '); 
+1

可能な複製を(http://stackoverflow.com/questions/236129/split-a-string-in-c) –

答えて

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; 
} 

を参照してください。 (getlineは必要ありません)。以下の機能を見てみましょう:[?スプリットC++で文字列]の

vector<string> Extract(const string& stoextract) { 
    vector<string> aListofWords; 
    stringstream sstoext(stoextract); 
    string sWordBuf; 

    while (sstoext >> sWordBuf) 
     aListofWords.push_back(sWordBuf); 

    return aListofWords; 
} 
+0

ますおそらくそれを引用する必要がありますが、私はよく分かりません。 – Rakete1111

1
#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'; 
    } 
} 
0

をあなたは演算子を使用することができます単語を抽出するためにmicrobuffer(文字列)に直接:

関連する問題