转换str字符串以用于std::getline分隔符的字符串

tring to convert str string for use in std::getline delimiter

本文关键字:字符串 getline 分隔符 用于 str 转换 std      更新时间:2023-10-16

im试图获取std::string值并将其用作std::getline()函数中的分隔符但无论我做什么,编译器都会给我错误。这就是我想做的:

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);
    }

我得到的错误总是关于constchar*转换。

 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 FilesMicrosoft Visual Studio 9.0VCincludestring(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 FilesMicrosoft Visual Studio 9.0VCincludestring(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 FilesMicrosoft Visual Studio 9.0VCincludestring(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 FilesMicrosoft Visual Studio 9.0VCincludestring(475) : see declaration of 'std::getline'
1>        could be 'char **'
1>        or       'char'

更新:
找到了答案:如何在C++中标记字符串
http://www.codeproject.com/Articles/23198/C-String-Toolkit-StrTk-Tokenizer

getline()的第三个参数是char,而不是char数组。看看这个。如果需要多个分隔符或由多个字符组成的分隔符,则不能使用此函数。

使用find()和substr()。

std::string::c_str()为您提供一个指向字符数组的指针。为了用调用c_str()的结果填充字符数组,您需要使用strcpy()strncpy()作为实际复制C样式字符串的结果。

此外,您已经将delrr声明为1024个字符的指针数组,而不是1024个字符,这真的是目的吗?