2013-05-26 54 views
-4

由於某些奇怪的原因,意圖將其拆分爲各種其他字符串並使用分隔符置於矢量字符串中的原始字符串不能很好地工作。我似乎無法找到我的錯誤。我在將字符串放入矢量字符串時遇到問題

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

using namespace std; 

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

int main() 
{ 
    split ("1,2,3,4,5",","); 
    return 0; 
} 

vector<string> split(string target, string delimiter) 
{ 
    vector<string> word; 
    string letter; 
    int i = 0; 
    int k = 0; 

    while (target[i] != '\0') 
    { 
     word.empty(); 
     word.push_back("target"); 
     while (target[i] != delimiter[0]) 
     { 
      letter = target[i]; 
      i++; 
     } 
     word[i]=letter; 
     i++; 

    } 
    return (word); 
} 
+1

定義 「不工作」。 –

+4

我想'split(「1,2,3,4,5」,「」);' - 用空格分隔逗號分隔的列表,這可能不是你想要的。 – 2013-05-26 18:52:48

+0

此外,分隔符應該可能是一個字符,因爲您只能使用第一個字母。 – wheybags

回答

0

第一個問題是,當你調用split,第二個參數是包含單個空格的字符串,但你是分裂字符串分隔用逗號。爲了完整性,在註釋部分中已經提到了H2CO3的其他問題在下面突出顯示。

  1. 您正在while循環的每次迭代期間清空矢量。
  2. 您在每次迭代期間都添加字符串「target」。
  3. 您正在向矢量添加單個字母。您應該添加整個字符串。
  4. 您沒有考慮到您提取的分隔符和單個字符串可能大於單個字符。
  5. 用於匹配字符串中分隔符的整體邏輯是錯誤的(至少對於您當前實現的方式而言)。你只是比較第一個字符,如果這是所需的行爲更改類型delimiterstring::value_type
  6. 本身並不是一個問題,但我建議按const引用而不是按值來傳遞字符串,因爲split不需要或複製任何一個。

下面的示例應該會幫助您更好地瞭解如何利用標準庫中已有的功能。它使用std::string的成員函數findsubstr,而不是直接直接訪問數據。我建議您在繼續之前仔細閱讀文檔std::vectorstd::string

std::vector<std::string> 
    split(const std::string& target, const std::string& delimiter) 
{ 
    std::vector<std::string> word; 
    size_t start = 0; 

    for(;;) 
    { 
     size_t loc = target.find(delimiter, start); 

     if(loc == std::string::npos) 
     { 
      word.push_back(&target[start]); 
      break; 
     } 

     word.push_back(target.substr(start, loc - start)); 
     start += (loc - start) + delimiter.size(); 
    } 

    return (word); 
} 
+0

啊我明白了。我想我現在明白了,謝謝。 – user2420395