2012-02-09 86 views
8

即時嘗試採取std::string值並將其用作分隔符std::getline()函數 但沒有mater我編譯器給我錯誤。 這是我嘗試做的事:特林轉換爲在std :: getline分隔符中使用的str字符串

std::stringstream ss(s); 
    std::string item; 
    std::string delim ="&&="; 
    int ssize = delim.size(); 
    int newssize = ssize+1; 
    char del[SSIZE]; // also here when i try gives error 
    strcpy(del,delim.c_str()); 

     char * delrr[1024] = delim.c_str(); //gives error 

     while(std::getline(ss,item,delrr)) { 
      elems.push_back(item); 
    } 

錯誤即時得到大約總是要爲const char *皈依。

error C2440: 'initializing' : cannot convert from 'const char *' to 'char *[1024]' 
1>  There are no conversions to array types, although there are conversions to references or pointers to arrays 
1>.\UT.cpp(179) : error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : expects 2 arguments - 3 provided 
1>  d:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(527) : see declaration of 'std::getline' 
1>.\UT.cpp(179) : error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::stringstream' 
1>  d:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(475) : see declaration of 'std::getline' 
1>.\UT.cpp(179) : error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::stringstream' 
1>  d:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(475) : see declaration of 'std::getline' 
1>.\UT.cpp(179) : error C2782: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : template parameter '_Elem' is ambiguous 
1>  d:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(475) : see declaration of 'std::getline' 
1>  could be 'char **' 
1>  or  'char' 

UPDATE:
找到了答案: How do I tokenize a string in C++?
http://www.codeproject.com/Articles/23198/C-String-Toolkit-StrTk-Tokenizer

+2

你可能想要* char delrr [1024] *而不是* char * delrr [1024] * – Gigi 2012-02-09 16:50:40

+0

請退後一步,用英文解釋你真正想做的事情,而不用提到任何實現細節。 – 2012-02-09 17:04:34

+0

如果我刪除* – user63898 2012-02-09 17:09:42

回答

4

getline()的第三個參數是一個char而不是char數組。見this。如果您需要多個分隔符或由多個字符組成的分隔符,則不能使用此功能。

+0

嗯,所以我能做些什麼,以獲得無法從'const char *'轉換爲'char [1024]' 使用大於一個字符的分隔符? – user63898 2012-02-09 17:31:59

+0

也是一個問題,但他在到達那條線之前得到了他的錯誤。 – 2012-02-09 17:44:54

+0

@ user63898:您需要搜索用作分隔符的子字符串,並提取分隔符之間的子字符串。 find()和substr()是你的朋友。 – 2012-02-09 18:41:41

3

的std :: string :: c_str()爲您提供了一個指向一個字符數組。爲了填充字符數組並將結果調用至c_str(),您需要使用strcpy()strncpy(),因爲那些實際上覆制C風格的字符串。

此外,您已宣佈delrr爲1024字符的數組指針而不是1024個字符,這是真的嗎?

相關問題