2015-08-16 296 views
1

我一直試圖從irr::stringw(irrlicht遊戲引擎核心字符串)轉換,以便我可以簡單地使用分隔符分隔字符串來創建數組/列表。無法從字符串轉換爲字符串/字符

但是,我無法從stringw轉換,它與任何常規函數都不兼容。

所以,到stringw分成列表我有以下幾點:

vector<stringw> split(stringw str, char delimiter){ 
    vector<stringw> internal; 
    std::string tok; 
    std::string std_s(str.c_str(), str.size()); 

    while (getline(std_s, tok, delimiter)) { 
     internal.push_back(tok); 
    } 
    return internal; 
} 

但是這裏的錯誤是:str.c_str()說:No instance of constructor "std::basic::string matches argument list. Argument types are (const wchar_t*, irr:u32)

getline方法錯誤:No instance of overloaded function "getline" matches the argument list. Argument types are: (std::string, std::string, char).

我已經嘗試了幾個小時的幾種方法來將stringw分割爲「;」的分隔符。 (分號),但沒有任何工作。有什麼建議?

回答

2

有兩個主要的問題在這裏,第一個是stringwwchar_t字符的字符串。因此我們需要使用std::wstringfacilities以避免必須將wchar_t轉換爲char

我們還需要注意,std::getline需要一個從std::basic_istream派生的類型,因爲它是第一個參數。因此,我們可以修改您的代碼,如下所示:

vector<stringw> split(stringw str, wchar_t delimiter) 
{ 
    vector<stringw> internal; 
    std::wstring tok; 
    std::wistringstream std_s(str.c_str()); 

    while(getline(std_s, tok, delimiter)) { 
     internal.push_back(tok); 
    } 
    return internal; 
} 
1

您是否嘗試過使用std::wstring而不是std::string

vector<stringw> split(stringw str, wchar_t delimiter) 
{ 
    vector<stringw> internal; 
    std::wstring tok; 
    std::wistringstream std_s(str.c_str()); 

    while (getline(std_s, tok, delimiter)) { 
     internal.push_back(stringw(tok)); 
    } 
    return internal; 
} 

編輯:您可能需要使用stringw構造,也許是這樣的: stringw(tok)

相關問題