Convertir cada caracter de una cadena en una cadena independiente [SOLUCIONADO]

Iniciado por jazx, 11 Mayo 2015, 03:36 AM

0 Miembros y 1 Visitante están viendo este tema.

jazx

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:


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?

x64core

como esto:


void freeStringArray(char** StringArray, size_t NumberOfStrings)
{
    size_t i;
    for (i = 0; i < NumberOfStrings; i++)
    {
        if (StringArray[i])
        {
            free(StringArray[i]);
        }
    }

    free(StringArray);
}

int splitchars(char*** StringArray, size_t* NumberOfStrings, char* CharArray)
{
    size_t ArrayLen;
    char** StringArrayPtr;
    size_t i;

    if (!StringArray ||
        !NumberOfStrings ||
        !CharArray)
    {
        return 0;
    }

    ArrayLen = strlen(CharArray);
    if (!(ArrayLen > 0))
    {
        return 0;
    }

    StringArrayPtr = malloc(sizeof(char*) * ArrayLen);
    if (!StringArrayPtr)
    {
        return 0;
    }

    memset(StringArrayPtr, 0, sizeof(char*) * ArrayLen);
    for (i = 0; i < ArrayLen; i++)
    {
        StringArrayPtr[i] = malloc(sizeof(char) * 2);
        if (!StringArrayPtr[i])
        {
            freeStringArray(StringArrayPtr, ArrayLen);
            return 0;
        }

        (StringArrayPtr[i])[0] = CharArray[i];
        (StringArrayPtr[i])[1] = 0;
    }

    *StringArray = StringArrayPtr;
    *NumberOfStrings = ArrayLen;
    return 1;
}


-


INT __cdecl main()
{
    char** strings1;
    size_t nstrings1;

    char** strings2;
    size_t nstrings2;

    char** strings3;
    size_t nstrings3;

    size_t i;

    splitchars(&strings1, &nstrings1, "Hello world");
    splitchars(&strings2, &nstrings2, "1234567890");
    splitchars(&strings3, &nstrings3, "abcdefghijk");

    for (i = 0; i < nstrings1; i++)
    {
        printf("%s\n", strings1[i]);
    }

    for (i = 0; i < nstrings2; i++)
    {
        printf("%s\n", strings2[i]);
    }

    for (i = 0; i < nstrings3; i++)
    {
        printf("%s\n", strings3[i]);
    }

    // free
    freeStringArray(strings1, nstrings1);
    freeStringArray(strings2, nstrings2);
    freeStringArray(strings3, nstrings3);

    return 0;
}


jazx

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:



   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...

ivancea96

Cita de: jazx en 11 Mayo 2015, 13:23 PM

En realidad todo se resume a que pueda hacer esto:



   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...

if(h[1]=='1') printf("El caracter es 1");

jazx

Ivancea96 ...

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

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

ivancea96

Atento a los tipos de las variables:

"frase" -> char*
'c' -> char

"frase"[0] -> char ( 'f' )
strcmp(char*, char*);

("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)

x64core

El error de sintaxis: cambiar "INT" a "int" Y al parecer estabas intentado matar una mosca con un cañon.