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
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!
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.
#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;
}
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;
}
@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.
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
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: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: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;
}
asinnn("Komodo");
te devolverá un arreglo con los valores: 75, 111, 109, 111, 100, 111
Saludos.
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...
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
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.
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...
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++));
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;
}
¡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;
}
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];
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!
Ok
Si solo quieres imprimirlo no necesitas ni siquiera variable auxiliar, puedes escribir un
caracter como numero con %d o %u
#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