Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Komodo en 1 Mayo 2010, 19:52 PM

Título: Coger caracteres de una palabra
Publicado por: Komodo en 1 Mayo 2010, 19:52 PM
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
Título: Re: Coger caracteres de una palabra
Publicado por: AckeR en 1 Mayo 2010, 20:17 PM
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!
Título: Re: Coger caracteres de una palabra
Publicado por: Dellarts en 1 Mayo 2010, 20:24 PM
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.
Título: Re: Coger caracteres de una palabra
Publicado por: leogtz en 1 Mayo 2010, 22:08 PM
#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;
}
Título: Re: Coger caracteres de una palabra
Publicado por: DarkItachi en 2 Mayo 2010, 00:39 AM
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;
}
Título: Re: Coger caracteres de una palabra
Publicado por: leogtz 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.
Título: Re: Coger caracteres de una palabra
Publicado por: DarkItachi en 2 Mayo 2010, 01:01 AM
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
Título: Re: Coger caracteres de una palabra
Publicado por: Og. en 2 Mayo 2010, 02:12 AM
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.
Título: Re: Coger caracteres de una palabra
Publicado por: .:BlackCoder:. en 2 Mayo 2010, 02:22 AM
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...
Título: Re: Coger caracteres de una palabra
Publicado por: leogtz en 2 Mayo 2010, 02:23 AM
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.
Título: Re: Coger caracteres de una palabra
Publicado por: .:BlackCoder:. en 2 Mayo 2010, 02:47 AM
No no hay error si no que la asignacion de un char a un caracter sin un cast, crei q daba error... Pero nunca dije q habia error  :xD Me referia a la linea de abajo, era por ponerlos a pensar :rolleyes: jeje

PD: Me confundi... Sorry

Una pregunta... Para que ese while(); no es mejor usar strlen? q esta en la libreria std?

Saludos...
Título: Re: Coger caracteres de una palabra
Publicado por: leogtz en 2 Mayo 2010, 04:09 AM
Da lo mismo, la aplicación del código es sencilla.

Los paréntesis aquí no son necesarios:
(len++)

Pudiera quedar así:

while(*(str + len++));
   
Título: Re: Coger caracteres de una palabra
Publicado por: Komodo en 2 Mayo 2010, 11:25 AM
Al final este código de Dellarts, me ha servido:

#include <iostream>

int main(){
     int x, valor;
     char cadena[]="Komodo";

    for(x=0;x<strlen(cadena);x++)
    {
           valor = cadena[x];
           printf("%i ",valor);
    }
return 0;
}
Título: Re: Coger caracteres de una palabra
Publicado por: do-while en 3 Mayo 2010, 06:08 AM
¡Hola!

Aqui va mi propuesta:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
   int* ascii = NULL, i=0;

   do{

       /* aumentamos el vector para almacenar un nuevo dato */
       ascii = (int*) realloc(ascii,(++i) * sizeof(int));

       ascii[i-1] = getchar();

       if(ascii[i-1] != '\n')
           printf("%d ",ascii[i-1]);

   }while(ascii[i-1] != '\n');

   /* haces lo que quieras con los valores almacenados ... */

   /* liberas la memoria */
   free(ascii);

   /* pausa */
   getchar();

   return 0;
}
Título: Re: Coger caracteres de una palabra
Publicado por: biribau en 3 Mayo 2010, 15:02 PM
Siento chafar, pero char se puede usar como int así que no hace falta ningún código.

char c = 'A';
int i;
i = c; //<-- cast implicito, porque un char en realidad es un entero con menor rango(1byte)

Si quieres pasarlo a un array de enteros aun así(estarás malgastando bytes), pues

char cadena[] = "Komodo";
int *asciis = (int *)malloc(sizeof(int)*strlen(cadena));
for(int i = 0; cadena[i]; i++)
      asciis[i] = cadena[i];
Título: Re: Coger caracteres de una palabra
Publicado por: Komodo en 3 Mayo 2010, 15:29 PM
biribau, yo buscaba lo que he puesto, simplemente, coger una palabra y en un for descompongo todas sus letras e imprimo sus valores asciis el code que tengo funciona a la perfección.

Está claro que un char se puede imprimir como int y a la inversa igual.

Saludos!
Título: Re: Coger caracteres de una palabra
Publicado por: biribau en 3 Mayo 2010, 15:39 PM
Ok
Si solo quieres imprimirlo no necesitas ni siquiera variable auxiliar, puedes escribir un
caracter como numero con %d o %u
Título: Re: Coger caracteres de una palabra
Publicado por: Mr.Blue en 4 Mayo 2010, 04:37 AM
Código (cpp) [Seleccionar]
#include <string.h>
#include <stdio.h>

void main()
{
 char cadena[] = "Komodo";
 int len = strlen(cadena);
 for (int x = 0; x < len; x++)
 {
printf("%d ", cadena[x]);
 }
}


podes modificar para que se ingrese la cadena i qye lo pase






**perdon vi q tenias la solucion ahi  es media parecida