2016-08-20 128 views
2

我正在嘗試製作一個C++程序,它接收用戶輸入並提取字符串中的單個單詞,例如, 「你好,鮑勃」會得到「你好」,「對」,「鮑勃」。最終,我將把它們推入一個字符串向量中。這是我嘗試在設計代碼時要使用的格式:從字符串中提取單個單詞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遇到的第一個空間的作品不工作有「你好我的世界」,pushBackVar將在第一個循環後成爲「Hello」,然後是第二個循環後的「Hello my」,當我想要「Hello」和「我的」時)。我該如何解決這個問題?有沒有其他更好的方法來從字符串中提取單個單詞?我希望我沒有困惑任何人。

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

所以你的情況只是做:

words = split(temp,' '); 
+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(串)中提取的單詞。 (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; 
} 
相關問題