Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Split() en c++

Estas en el tema de Split() en c++ en el foro de C/C++ en Foros del Web. Gente les dejo un pequeño aporte, considerando que en c++ no tenemos la funcion split, y la funcion strtok (http://www.cplusplus.com/reference/clibrary/cstring/strtok.html) no me agrada por el ...
  #1 (permalink)  
Antiguo 17/11/2008, 18:27
 
Fecha de Ingreso: septiembre-2008
Mensajes: 14
Antigüedad: 15 años, 7 meses
Puntos: 1
Información Split() en c++

Gente les dejo un pequeño aporte, considerando que en c++ no tenemos la funcion split, y la funcion strtok (http://www.cplusplus.com/reference/clibrary/cstring/strtok.html) no me agrada por el tema de string a char y punteros y demas...
Bueno en fin, mi funcioncita split hecha con stl...



#include <cstdlib>
#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char *argv[])
{
vector<string> pablo;
size_t found;

string linea = "Roberto,Giordano";
found = linea.find(",");
pablo.push_back(linea.substr(0,found));
pablo.push_back(linea.substr(found+1,linea.size()) );

cout<<pablo[0]<<" "<<pablo[1]<<endl;

system("PAUSE");
return EXIT_SUCCESS;
}



Espero les sirva!
Un abrazo!!
  #2 (permalink)  
Antiguo 18/11/2008, 03:22
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 3
Respuesta: Split() en c++

Buenos dias,

gracias por este codigo. Si le interesa, tengo una funcion que hace mas o menos lo mismo aqui:
Código:
typedef std::vector<std::string>  StringVector;

StringVector Explode(const std::string & str, char separator )
{
   StringVector  result;
   size_t pos1 = 0;
   size_t pos2 = 0;
   while ( pos2 != str.npos )
   {
      pos2 = str.find(separator, pos1);
      if ( pos2 != str.npos )
      {
         if ( pos2 > pos1 )
            result.push_back( str.substr(pos1, pos2-pos1) );
         pos1 = pos2+1;
      }
   }
   result.push_back( str.substr(pos1, str.size()-pos1) );
   return result;
}
La ventaja de este codigo es que podemos separar la cadena en mas de dos trozos.

Nota 1: hay algo raro en tu codigo: en caso que no hay nuguno ',' en la cadena, el resultado es raro, porque no tienes en cuenta el resultado del funcion miembro string::find().

Nota 2: si posible, hay que evitar el uso de
Código:
system("PAUSE");
(para varias razones, si quieres, te explico un poco), es preferible, cuando es posible, utilizar
Código:
std::cin.get();
por ejemplo.
  #3 (permalink)  
Antiguo 18/11/2008, 08:07
 
Fecha de Ingreso: septiembre-2008
Mensajes: 14
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Split() en c++

r0d gracias por la respuesta, pero si se pueden hacer muchas mejoras o cosas mas al codigo. Esta armando asi porque eso me fue suficiente para resolver mi problema. Que cada uno lo adapte para lo que lo necesite.
No lo probe pero parece que tu codigo funciona ok, y buenisimo que labure hasta que no encuentre mas expresiones generales.

nota 1, la forma de validar que devuelva algo el find es preguntar asi
if(found!=string::npos) o dentro de un while o como sea.

nota 2, y bue, el devc++ te lo pone como default en el main.. cree copie pegue, y a otra cosa, quedo!


Saludos!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:08.