Hola, pues estoy armando unas funciones para manejar mas cómodo las cadenas en C.
Y estoy teniendo un problema con este código.
Funciones de cadenas
Código C:
Ver original/*arrays.h*/
#include <stdio.h>
int LongCad(char* cad)
{
int x=0;
while(cad[x] != '\0')x++;
return x;
}
int GetCadPos(char* txt, char* cad, int startpos)
{
int CadLong = LongCad(cad);
int TxtLong = LongCad(txt);
char* tmp
= (char*)calloc(CadLong
, sizeof(char)); int i;
int x;
for (i=startpos; i <= (TxtLong-CadLong); i++)
{
for (x=0; x < CadLong; x++)
tmp[x] = txt[i+x];
if (isSameCad(tmp, cad) == 1)
return i;
}
return -1;
}
int isSameCad(char* cad1, char* cad2)
{
int Long1 = LongCad(cad1);
int Long2 = LongCad(cad2);
if (Long1 != Long2)
return 0;
int x;
for (x=0; x < Long2; x++)
{
if (cad1[x] != cad2[x])
return 0;
}
return 1;
}
char* ReplaceBetween(char* cadena, char* inicio, char* fin, char* remplazar)
{
int Pos_I = GetCadPos(cadena, inicio, 0)+(LongCad(inicio)-1);
int Pos_F = GetCadPos(cadena, fin, Pos_I);
int rLong = LongCad(remplazar)-1;
int ExtraSize = rLong - (Pos_F-Pos_I);
int CadenaLong = LongCad(cadena);
char* NewCad
= (char*)calloc((CadenaLong
+ExtraSize
), sizeof(char));
int x;
for (x=0; x <= Pos_I; x++)
NewCad[x] = cadena[x];
int y=x;
int i;
int z;
for (i=0; i <= rLong; i++)
NewCad[y++] = remplazar[i];
for (z=Pos_F; z <= CadenaLong; z++)
NewCad[y++] = cadena[z];
return NewCad;
}
char* ConstToCad(const char* cad)
{
return (char *)(cad);
}
char* GetCadBetween(char* cadena, char* inicio, char* fin)
{
int Pos_I = GetCadPos(cadena, inicio, 0)+(LongCad(inicio)-1);
int Pos_F = GetCadPos(cadena, fin, Pos_I);
char* NewCad
= (char*)calloc((Pos_F
-Pos_I
)+1, sizeof(char)); // printf("%i\n", Pos_I);
int i;
int x=0;
for (i =Pos_I; i < Pos_F; i++)
NewCad[x++] = cadena[i];
return NewCad;
}
Main.c
Código C:
Ver original#include <stdio.h>
#include "arrays.h"
#ifdef WINDOWS
#include <direct.h>
#define GetCurrentDir _getcwd
#else
#include <unistd.h>
#define GetCurrentDir getcwd
#endif
void S_pause()
{
char c;
do
{
} while (c != '\n');
}
int main()
{
char* cad2;
cad2 = ReplaceBetween(ConstToCad("Stealzps<Doom>Hola</Doom>"), ConstToCad("<Doom>"), ConstToCad("</Doom>"), "Soy el Doom 4");
printf("Prueba: %s\n", cad2
); //Esto funciona bien char* cad3;
cad3 = GetCadBetween(ConstToCad("Stealzps<Doom>Hola</Doom>"), ConstToCad("<Doom>"), ConstToCad("</Doom>"));
printf("Pueba2: %s", cad3
); //Esto no S_pause();
return 0;
}
Salida:
Stealzps<Doom>Soy el Doom 4</Doom>
y luego el programa se crashea o me devuelve
lzps<Doom>Soy el Doom 4
Definitivamente esta mal la funcion
GetCadPos., pero no se en que.
Si pudieran ayudarme se los agradecería mucho :D