Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jazx en 11 Mayo 2015, 03:36 am



Título: Convertir cada caracter de una cadena en una cadena independiente [SOLUCIONADO]
Publicado por: jazx en 11 Mayo 2015, 03:36 am
Hola, soy nuevo en el foro, y he buscado por mil lugares sin tener claro como resolver esto que debe ser, segun imagino, algo muy simple:

Imaginen que tengo una cadena (char) que contiene "abcdefgh" ... y quiero que cada una de las letras, segun su posicion en la cadena queden en variables para poder compararlas.... como podria hacerse?

Ejemplo:

Código:
char micadena[9] = "abcdefgh";
const char *h = micadena;

// luego puedo llamar a cada caracter e imprimirlos sin problemas haciendo

printf("%c\n", h[0]);
printf("%c\n", h[1]);
printf("%c\n", h[2]);
printf("%c\n", h[3]);
printf("%c\n", h[4]);
printf("%c\n", h[5]);
printf("%c\n", h[6]);
printf("%c\n", h[7]);

// Pero no encuentro la forma de que el contenido de, por ejemplo, "h[0]" se guarde en otra cadena ...

He probado de mil formas pero no encuentro el modo...

Un detalle... siempre he armado scripts en bash (linux), incluso muy complejos, pero recien hace 3 dias empece con C... asi que mi conocimiento de este lenguaje es sumamente limitado.

Es un programa muy simple el que estoy haciendo... pero no logro convertir cada uno de los caracteres de una cadena independiente para poder trabajar con cada una de las letras de forma independiente.

Alguien me ayudaria por favor?


Título: Re: Convertir cada caracter de una cadena en una cadena independiente
Publicado por: x64core en 11 Mayo 2015, 04:55 am
como esto:

Código
  1. void freeStringArray(char** StringArray, size_t NumberOfStrings)
  2. {
  3.    size_t i;
  4.    for (i = 0; i < NumberOfStrings; i++)
  5.    {
  6.        if (StringArray[i])
  7.        {
  8.            free(StringArray[i]);
  9.        }
  10.    }
  11.  
  12.    free(StringArray);
  13. }
  14.  
  15. int splitchars(char*** StringArray, size_t* NumberOfStrings, char* CharArray)
  16. {
  17.    size_t ArrayLen;
  18.    char** StringArrayPtr;
  19.    size_t i;
  20.  
  21.    if (!StringArray ||
  22.        !NumberOfStrings ||
  23.        !CharArray)
  24.    {
  25.        return 0;
  26.    }
  27.  
  28.    ArrayLen = strlen(CharArray);
  29.    if (!(ArrayLen > 0))
  30.    {
  31.        return 0;
  32.    }
  33.  
  34.    StringArrayPtr = malloc(sizeof(char*) * ArrayLen);
  35.    if (!StringArrayPtr)
  36.    {
  37.        return 0;
  38.    }
  39.  
  40.    memset(StringArrayPtr, 0, sizeof(char*) * ArrayLen);
  41.    for (i = 0; i < ArrayLen; i++)
  42.    {
  43.        StringArrayPtr[i] = malloc(sizeof(char) * 2);
  44.        if (!StringArrayPtr[i])
  45.        {
  46.            freeStringArray(StringArrayPtr, ArrayLen);
  47.            return 0;
  48.        }
  49.  
  50.        (StringArrayPtr[i])[0] = CharArray[i];
  51.        (StringArrayPtr[i])[1] = 0;
  52.    }
  53.  
  54.    *StringArray = StringArrayPtr;
  55.    *NumberOfStrings = ArrayLen;
  56.    return 1;
  57. }
  58.  

-

Código
  1. INT __cdecl main()
  2. {
  3.    char** strings1;
  4.    size_t nstrings1;
  5.  
  6.    char** strings2;
  7.    size_t nstrings2;
  8.  
  9.    char** strings3;
  10.    size_t nstrings3;
  11.  
  12.    size_t i;
  13.  
  14.    splitchars(&strings1, &nstrings1, "Hello world");
  15.    splitchars(&strings2, &nstrings2, "1234567890");
  16.    splitchars(&strings3, &nstrings3, "abcdefghijk");
  17.  
  18.    for (i = 0; i < nstrings1; i++)
  19.    {
  20.        printf("%s\n", strings1[i]);
  21.    }
  22.  
  23.    for (i = 0; i < nstrings2; i++)
  24.    {
  25.        printf("%s\n", strings2[i]);
  26.    }
  27.  
  28.    for (i = 0; i < nstrings3; i++)
  29.    {
  30.        printf("%s\n", strings3[i]);
  31.    }
  32.  
  33.    // free
  34.    freeStringArray(strings1, nstrings1);
  35.    freeStringArray(strings2, nstrings2);
  36.    freeStringArray(strings3, nstrings3);
  37.  
  38.    return 0;
  39. }
  40.  
  41.  


Título: Re: Convertir cada caracter de una cadena en una cadena independiente
Publicado por: jazx en 11 Mayo 2015, 13:23 pm
Wow ....

Ante todo, gracias por contestar tan rapido...  y por cierto, es mas complejo de lo que imaginaba...

Y, perdon por la insistencia... pero no existe un modo mas directo?
Es decir... ya tengo cada caracter en h[0] h[1] h[2] h[3] ...

Ademas, cada caracter solo puede ser 0 o 1 ... es decir... en el codigo tengo:

char micadena[9] = "00101101";

Necesito que h[0], h[1], h[2] ... puedan ser escritos dentro de una variable... no se si con strcpy o alguna funcion puedo hacer algo asi...

Es muy simple... solo tengo que poder hacer luego:

Si nuevavariable = 0 >> hacer tal o cual cosa
Si nuevavariable = 1 >> hacer tal otra

No debe ser tan complicado... quiza con alguna libreria especifica...

Y si no, quiza se pueda hacer algo mas sencillo...

En realidad todo se resume a que pueda hacer esto:

Código:

   i = strcmp( h[1], "1" );
   if( i == 0 )  printf("el caracter es 1");


Pero me da error en la sintaxis de la primera linea cuando voy a compilarlo con gcc...

Si puedo escribir esa simple comparacion resuelvo todo el asunto...


Título: Re: Convertir cada caracter de una cadena en una cadena independiente
Publicado por: ivancea96 en 11 Mayo 2015, 14:06 pm

En realidad todo se resume a que pueda hacer esto:

Código:

   i = strcmp( h[1], "1" );
   if( i == 0 )  printf("el caracter es 1");


Pero me da error en la sintaxis de la primera linea cuando voy a compilarlo con gcc...

Si puedo escribir esa simple comparacion resuelvo todo el asunto...

Código
  1. if(h[1]=='1') printf("El caracter es 1");


Título: Re: Convertir cada caracter de una cadena en una cadena independiente
Publicado por: jazx en 11 Mayo 2015, 14:54 pm
Ivancea96 ...

Te estoy amando con toda el alma... la comparacion funciona ahora a la perfeccion...

GRACIAS!!!!!!!!!!!!!!!


Título: Re: Convertir cada caracter de una cadena en una cadena independiente [SOLUCIONADO]
Publicado por: ivancea96 en 11 Mayo 2015, 15:08 pm
Atento a los tipos de las variables:

Código
  1. "frase" -> char*
  2. 'c' -> char
  3.  
  4. "frase"[0] -> char ( 'f' )
  5. strcmp(char*, char*);
  6.  
  7. ("f" == 'f') -> bool (false), "f" es un char* y 'f' es un char. El primero es una direccion de memoria de, generalmente, 4 bytes. El segundo es un tipo entero de 1 byte (que se representa como una letra)
  8.  


Título: Re: Convertir cada caracter de una cadena en una cadena independiente [SOLUCIONADO]
Publicado por: x64core en 12 Mayo 2015, 03:56 am
El error de sintaxis: cambiar "INT" a "int" Y al parecer estabas intentado matar una mosca con un cañon.