Coger caracteres de una palabra

Iniciado por Komodo, 1 Mayo 2010, 19:52 PM

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

Komodo

Tengo una duda, que es la siguiente como podría coger todos los caracteres de una palabra y sacar su valor ascii y guardarlos en un arreglo int, a ser posible, un ejemplo sería lo siguiente:

Komodo - 75,111,109,111,100,111

Simple, ¿no? aquí cogería la palabra Komodo y cada char lo pasaría a int dandonos su valor ascii, pues lo que busco es hacer eso y que esos valores ascii se guarden como enteros.

Gracias


AckeR

Buenas!

Podrias Hacer algo asi :


int valorAscii=0;
char letra = 'A';
valorAscii = (int)letra;


No lo he Compilado, pero creo que así debería funcionar.

Suerte!

...DaR LaS GraCiaS No CuestA NadA...

Dellarts

Yo lo haria asi


void main(){
      int x, valor;
      char cadena[50] ="komodo";

     for(x=0;x<strlen(cadena);x++)
            valor = atoicadena[x];

}



Igual tiene algun error de compilacion x es asi.

leogtz

#3
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
    char cadena[] = "75,111,109,111,100,111", copia[200];
    strcpy(copia, cadena);
    char *elemento = strtok(cadena, ",");
    unsigned short int i = 0, j = 0;
    while(elemento != NULL)
    {
        elemento = strtok(NULL, ",");
        i++;
    }
    signed int *vector = (int *)malloc(sizeof(int) * i);
    elemento = strtok(copia, ",");
    while(elemento != NULL)
    {
        *(vector + j++) = atoi(elemento);
        elemento = strtok(NULL, ",");
    }
    for(j = 0; j < i; j++)
    printf("[%d]", *(vector + j));
    return 0;
}
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

DarkItachi

Código (cpp) [Seleccionar]

char* stringtoascii(char *cad)
{
    int size=strlen(cad);
    char *supercad=new char[size*5]; strcpy(supercad,"");
    for (int n=0;n<size;n++)
    {
        char *num=new char[3]; itoa(int(cad[n]),num,10);
        supercad=strcat(supercad,num);
        if (n!=size-1) supercad=strcat(supercad,",");
    }
    return supercad;
}
Come to me when you have these eyes...

By more that you try it, a feather never will achieve to fly.

leogtz

@DarkItachi

Algunas cuestiones con tu código.

-Poner más de una sentencia en una línea, es un mal hábito de programación, aunque el compilador lo permita.

-itoa() no forma parte del standard, aunque algunos compiladores lo permitan.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

DarkItachi

Cita de: Leo Gutiérrez. en  2 Mayo 2010, 00:44 AM
@DarkItachi

Algunas cuestiones con tu código.

-Poner más de una sentencia en una línea, es un mal hábito de programación, aunque el compilador lo permita.

-itoa() no forma parte del standard, aunque algunos compiladores lo permitan.

Cierto, itoa no forma parte del standard, lo tendré en cuenta :)

Respecto a lo de poner más de una sentencia en una línea, para mí es un buen hábito, junto cosas relacionadas para no confundirme y en if/while/for si son sentencias cortas para que el código quede más compactado.

Gracias por dar tu opinión :P
Come to me when you have these eyes...

By more that you try it, a feather never will achieve to fly.

Og.

#7
4 códigos, 1 no tienen nada que ver con el tema, 1 no hace absolutamente nada y el de DarkItachi no es lo que se necesitaba (lee el post xD). Ninguna respuesta concisa :P

El tipo de dato char, es de 1 byte (8 bits) osea que puedes guardar 28 posibles combinaciones (estas combinaciones son la tabla ASCII). realmente cuando guardas un carácter en un entero, estas guardando un numero el cual se representa como ese carácter que quieres almacenar. Por ejemplo intenta hacer esto:
Código (C++) [Seleccionar]
std::cout << 'a' << std::endl << (int)'a';lo que ese código te mostrara sera simplemente:a
97
97 es el valor que en la tabla ASCII equivale a 'a'.
si quieres convertir una cadena de caracteres puedes simplemente hacer:
Código (cpp) [Seleccionar]
int* nnn(const char *str)
{
   unsigned short int len = 0;
   while(*(str+(len++)));
   int *arregloF = new int[len], *cpy = arregloF;
   while(*str)
       *(cpy++) = *str++;
   return arregloF;
}

asi
Código (c++) [Seleccionar]
nnn("Komodo");
te devolverá un arreglo con los valores: 75, 111, 109, 111, 100, 111

Saludos.
|-

.:BlackCoder:.

Código (cpp) [Seleccionar]
int *arregloF = new int[len], *cpy = arregloF;

Nunca habia visto algo asi :o
Ese cpy de donde salio??  :xD

Aunque me parece mejor el de Acker... Pero pes el tuyo ta interesante  ::)
Saludos...
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja




leogtz

#9
Entendí mal el problema.

Solo tomé en cuenta esto:

CitarKomodo - 75,111,109,111,100,111

Es decir, mi código toma esto:
75,111,109,111,100,111

Y lo muestra así:
Komodo
Cita de: El_nuevo_HH en  2 Mayo 2010, 02:22 AM
Código (cpp) [Seleccionar]
int *arregloF = new int[len], *cpy = arregloF;
Ese cpy de donde salio??  :xD

Son definiciones y creaciones múltiples, yo no le veo el error.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com