2012-02-09 6 views
8

im tratando de tomar std::string valor y utilizarlo como delimitador en función std::getline() pero no mater lo que hago el compilador me da error. esto es lo que estoy tratando de hacer:Tring para convertir una cadena str para su uso en std :: getline delimitador

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

la im error al obtener siempre se trata de const char * conversión.

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' 

ACTUALIZACIÓN:
encontrado la respuesta: How do I tokenize a string in C++?
http://www.codeproject.com/Articles/23198/C-String-Toolkit-StrTk-Tokenizer

+2

Probablemente desee * char delrr [1024] * en lugar de * char * delrr [1024] * – Gigi

+0

Por favor, retroceda y explique lo que realmente quiere hacer, en inglés, sin referirse a ningún detalle de implementación. –

+0

obteniendo no se puede convertir de 'const char *' a 'char [1024]' si elimino el * – user63898

Respuesta

4

El tercer argumento de getline() es un char, no una matriz char. Ver this. No puede usar esta función si necesita múltiples delimitadores o un delimitador compuesto por varios caracteres.

+0

Hmm, ¿qué puedo hacer para poder usar el delimitador más grande que un char? – user63898

+0

También es un problema, pero obtiene su error antes de llegar a esa línea. –

+0

@ user63898: debe buscar la subcadena utilizada como delimitador y extraer las subcadenas entre los delimitadores. find() y substr() son tus amigos. –

3

std :: string :: c_str() le da un puntero a un array de caracteres. Para llenar una matriz de caracteres con los resultados de la llamada al c_str(), deberá usar strcpy() o strncpy(), ya que en realidad copian la cadena del estilo C.

Además, se ha declarado delrr como una matriz de 1024 caracteres punteros en lugar de los 1024 caracteres, es que realmente la intención?

Cuestiones relacionadas