2016-11-20 12 views
0

次のコードは、区切り文字で区切り文字を関数を使用して分割することになっています。私はそれが文字列delimiterで区切られtarget内のサブストリングのベクトルを返すように機能を実装する必要が文字列を区切り文字でベクトルに分割する必要があります

vector<string> split(string target, string delimiter); 

は、次の関数宣言を考えます。例えば:

split("10,20,30", ",") 

は、文字列 "10"、 "20"、および "30" でvectorを返すべきです。同様に、

split("do re mi fa so la ti do", " ") 

は "やる" 文字列でvectorを返す必要があり、 "再"、 "ミ"、 "FA"、 "そう"、 "ラ"、 "TI"、および "やります"。

私のコードは、vectorの最初の要素のみを出力します。関数の実装に間違いはありません。

#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 

vector<string> split(string, string); 

int main() 
{ 
    vector<string> v; 
    string target; 
    string delim; 
    split(target, delim); 
    v = split(target, delim); 
    for (unsigned long i = 0; i < v.size(); i++) 
     cout << v[i] << " "; 
} 

vector<string> split(string target, string delim) 
{ 
    cout << "Enter string: "<< endl; 
    getline(cin, target); 
    cout << "Enter delimiter:" << endl; 
    getline(cin, delim); 
    vector<string> v; 
    size_t x = target.find(delim); 
    while (x!= string::npos) { 
     v.push_back(target.substr(0,x)); 
     target = target.substr(x); 
     x = target.find(delim); 
    } 
    return v; 
} 
+0

何かがあなたが合理的にインデント場合は明らかだろうこれ、明らかに '' { ''対}の掲載コードのバランスに問題があります。あなたの競合しない 'return'はあなたの' while'ループの中に埋め込まれています。意味:反復は1回だけ行われます。 – WhozCraig

+0

この質問に対する答えは、デバッガを使用することです。 –

答えて

0

ではなく、より多くのこのような何かを試してみてください:

#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 

vector<string> split(string, string); 

int main() 
{ 
    vector<string> v; 
    string target; 
    string delim; 

    cout << "Enter string: "<< endl; 
    getline(cin, target); 
    cout << "Enter delimiter:" << endl; 
    getline(cin, delim); 

    v = split(target, delim); 
    for (unsigned long i = 0; i < v.size(); i++) 
     cout << v[i] << " "; 
} 

vector<string> split(string target, string delim) 
{ 
    vector<string> v; 
    if (!target.empty()) { 
     string::size_type start = 0; 
     do { 
      size_t x = target.find(start, delim); 
      if (x == string::npos) 
       break; 

      v.push_back(target.substr(start, x-start)); 
      start += delim.size(); 
     } 
     while (true); 

     v.push_back(target.substr(start));    
    } 
    return v; 
} 
関連する問題