【问题标题】:tring to convert str string for use in std::getline delimiter转换 str 字符串以在 std::getline 分隔符中使用
【发布时间】:2012-03-02 04:06:13
【问题描述】:

我试图获取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'

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

【问题讨论】:

  • 你可能想要 char delrr[1024] 而不是 char * delrr[1024]
  • 请退后一步,用英文解释你真正想做的事情,不要提及任何实施细节。
  • 如果我删除 *,getting 无法从 'const char *' 转换为 'char [1024]'
  • karl,到底分割函数是std::string

标签: c++ string split


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    使用 find() 和 substr()。

    【讨论】:

    • 嗯,我该怎么做才能使用大于一个字符的分隔符?
    • 也是一个问题,但他在到达那条线之前就得到了错误。
    • 你为我节省了很多时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2010-10-19
    • 2014-04-28
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    相关资源
    最近更新 更多