Agradezco a todos por el apoyo, especialmente al usuario "simulador" que logró lo imposible!!
Bien, dejémonos de mariconeadas y vamos a los bifes. Este es un ejemplo de como se puede implementar un split en C++.
Hay varias cosas que se pueden mejorar, como la variable "divididos" que la tuve que declarar global... ya que me daba error al querer pasarla como argumento
Les dejo el source completo (100 % codeado por mí) , probado en WxDev-C++
Sólo tienen que modificar el TOT_DATOS según el uso que se le de.
Código: Seleccionar todo
#include <iostream>
#define TOT_DATOS 3
using namespace std;
bool osnaraus_split(char *buffer,char *delimitador);
string divididos[TOT_DATOS];
int main()
{
FILE * fp;
long tamano;
char * buffer;
char *delimitador="culo";
size_t result;
for (int m=0;m<TOT_DATOS;m++)
divididos[m]="";
fp = fopen ( "C:\\archivo.exe" , "rb" );
if (fp==NULL) exit (1);
fseek (fp , 0 , SEEK_END);
tamano = ftell (fp);
rewind (fp);
buffer = (char*) malloc (sizeof(char)*tamano);
if (buffer == NULL) exit (2);
result = fread (buffer,1,tamano,fp);
if (result != tamano) exit (3);
if(osnaraus_split(buffer,delimitador))
{
for (int i=0;i<TOT_DATOS;i++)
cout<<divididos[i]<<endl;
}
getchar();
fclose (fp);
free (buffer);
return 0;
}
//--------------------------------------------------
bool osnaraus_split(char *buffer,char *delimitador)
{
bool sigue;
int aux;
int i;
long buffi=0;
int divi=0;
while (divi<TOT_DATOS)
{
sigue=true;
while( (buffi<strlen(buffer)) && (sigue==true) )
{
aux=0;
for (i=0;i<strlen(delimitador);i++)
{
if (buffer[buffi]!=delimitador[i])
{
if (aux>0)
{
for (int j=0;j<aux;j++)
divididos[divi]+=delimitador[j];
}
divididos[divi]+=buffer[buffi];
i=strlen(delimitador)+1;
}
buffi ++;
aux ++;
}
if ((strlen(delimitador))==i)
sigue=false;
}
divi++;
}
return true;
}
Comentarios , dudas y recomendaciones son bienvenidas.
Saludos