2015-09-20 42 views
1

我試圖從用戶處取得一個字符串輸入,將其拆分爲每個空格處的單個字符串並將其存儲在向量中。我使用this後的第一個代碼片段(這是問題的第二個回答)對字符串進行拆分。這些是我在編譯時遇到的錯誤:將字符串拆分爲字符串向量時出現無效的轉換錯誤

stringTest.cpp:函數'int main()': stringTest.cpp:23:30:錯誤:從'const char *'無效轉換爲'char'[ -fpermissive] split(input,「」,splitInput); ^

stringTest.cpp:8:17:錯誤:初始化的參數2 '的std ::矢量> &分裂(的std :: string &,炭,性病::矢量> &)'[-fpermissive] 矢量&分裂(字符串& S,焦炭DE​​LIM,矢量& elems的){

我意識到發生了什麼的第一個錯誤的說法,但無法弄清是怎麼引起的問題,我不知道第二個錯誤方式。

這是我寫的代碼(所有的主從鏈接後拍攝外):因爲

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

using namespace std; 

vector<string> &split(string &s, char delim, vector<string> &elems) { 
    stringstream ss(s); 
    string item; 
    while (getline(ss, item, delim)) { 
     elems.push_back(item); 
    } 
    return elems; 
} 

int main(){ 

    string input; 
    cin>>input; 
    vector<string> splitInput; 

    split(input, " ", splitInput); 

    for(int i = 0; i < splitInput.size(); i++){ 
     cout<< splitInput.at(i) << endl; 
    } 

    return 0; 
} 
+1

讓它'分裂(輸入, '',splitInput);'。請注意單引號代替雙引號。閱讀您最喜愛的C++教科書中的字符文字和字符串文字。 –

回答

1

更改此

split(input, " ", splitInput); 

這個

split(input, ' ', splitInput); 

該功能的原型是:

vector<string> &split(string &s, char delim, vector<string> &elems) ;,它請求char作爲第二個參數,而不是一個字符串。

" "是一個字串文本,其具有類型const char[2],而' '是一個字符,它具有類型char

您還可以檢查這個問題:What is the type of string literals in C and C++?

+0

啊,謝謝!我仍然試圖獲得C++的訣竅,並且我忘記了''與'「不同。仍然習慣於用Java編寫。我解決了這個問題,但現在只是將字符串中的第一個字符放入向量中,而不是其他字符。 –

+0

歡迎您!嘗試在每一步打印您的變量,並調試您的程序。如果你有問題,發佈一個新問題,快樂調試! :D – gsamaras

+0

因此,我在split方法的while循環的每次迭代中打印出項目,並且它只運行一次循環。這意味着getline(ss,item,delim)在一次迭代後返回false。我查閱了getline的參考資料,但我仍然不知道爲什麼它在一次迭代後返回false。 –

相關問題