尝试将字符串str转换为可用于std::getline分隔符的格式

9

我试图将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);
    }

我遇到的错误总是涉及到`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'

更新:
找到了答案:如何在C++中对字符串进行分词?
http://www.codeproject.com/Articles/23198/C-String-Toolkit-StrTk-Tokenizer


2
你可能想要使用 char delrr[1024] 而不是 *char * delrr[1024]*。 - Gigi
请先退后一步,用英语解释您真正想做什么,不要涉及任何实现细节。 - Karl Knechtel
无法转换类型,从'const char '到'char [1024]',如果我去掉''。 - user63898
Karl,在最后一个分割函数中,定界符是std::string。 - user63898
2个回答

3

std::string::c_str()会提供一个字符数组指针。为了使用c_str()的结果填充字符数组,你需要使用strcpy()strncpy(),因为它们实际上是复制C风格的字符串。

此外,你声明的delrr是1024个字符指针的数组,而不是1024个字符,这是否符合意图?


3

getline()的第三个参数是字符而不是字符数组。请参见此文档。如果需要多个分隔符或由多个字符组成的分隔符,则无法使用此函数。

应该使用find()和substr()函数。


嗯,那我该怎么做才能使用大于一个字符的分隔符呢? - user63898
还有一个问题,但他在到达那一行之前就已经出现了错误。 - Matt Phillips
你节省了我很多时间。 - Mohamed Iqzas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接