¡Advertencia!
Este tema no ha tenido respuestas en más de un mes. Recuerda que si deseas añadir una nueva debes cumplir con las normas de la web.
No es por una tarea ni nada, solo quiero realizar algo. Mi inquietud es como crear un programa que pida el ingreso de una frase cualquiera como "Viva Habtium", y por cada letra tengo asignado un número y con eso también crear una cadena que genere una palabra hecha por números. Ejemplo A=1 B=2 C=3 etc... El programa si se puede que sea desarrollado en C.

Espero que alguien me pueda ayudar, muchas gracias.

Aka Camilo, viejo zorro / Cibersecurity & Network administrator / Cisco CCNA R&S Certified / Systems & Telecommunications Engineer / Bad boy, rude boy, skin boy.
Si te refieres a convertir cada carácter de la frase en una cifra (por lo que describes, la correspondiente en su alfabeto), una función de C encargada en convertir cada letra en una cifra podría ser:

int convierteLetra(char letra)
{
	// Convierte a mayúsculas y devuelve directamente su número del abecedario.
	return (int)toupper(letra) - 64;
}

64 es el número correspondiente al carácter anterior a la 'A' en la tabla de caracteres ASCII.


Como la frase que introduzcamos se almacenará en un puntero de char, iremos imprimiendo por pantalla cada una de las cifras correspondientes a cada carácter invocando a la función anterior elemento por elemento, excluyendo los caracteres que no sean letras (hace muchos años que no trabajo con C y menos con cadenas de caracteres bajo el estándar de C, así que el código de a continuación quizá podría optimizarse un poco xd):
void imprimeFrase(char *frase)
{
int i; // Iterador

for(i = 0;i < strlen(frase);i++)
{
// Solo nos interesa convertir letras a números
if((int)toupper(frase) >= 'A' && (int)toupper(frase) <= 'Z')
printf("%u ", convierteLetra(frase)); // Imprimirá por salida estándar cada cifra separada por un espacio
}
}
(Cita este mensaje para ver bien el código)


Por último la parte del main podríamos dejarla así, por ejemplo:

$$CODE1$$


Un ejemplo de ejecución sería:

HolaQueTal

=> 8 15 12 1 17 21 5 20 1 12

Perro viejo de Habbo y de HabboStium. Y lo mismo en la vida real, pero sin el "perro".

Si te refieres a convertir cada carácter de la frase en una cifra (por lo que describes, la correspondiente en su alfabeto), una función de C encargada en convertir cada letra en una cifra podría ser:

int convierteLetra(char letra)
{
	// Convierte a mayúsculas y devuelve directamente su número del abecedario.
	return (int)toupper(letra) - 64;
}

64 es el número correspondiente al carácter anterior a la 'A' en la tabla de caracteres ASCII.


Como la frase que introduzcamos se almacenará en un puntero de char, iremos imprimiendo por pantalla cada una de las cifras correspondientes a cada carácter invocando a la función anterior elemento por elemento, excluyendo los caracteres que no sean letras (hace muchos años que no trabajo con C y menos con cadenas de caracteres bajo el estándar de C, así que el código de a continuación quizá podría optimizarse un poco xd):
void imprimeFrase(char *frase)
{
int i; // Iterador

for(i = 0;i < strlen(frase);i++)
{
// Solo nos interesa convertir letras a números
if((int)toupper(frase) >= 'A' && (int)toupper(frase) <= 'Z')
printf("%u ", convierteLetra(frase)); // Imprimirá por salida estándar cada cifra separada por un espacio
}
}
(Cita este mensaje para ver bien el código)


Por último la parte del main podríamos dejarla así, por ejemplo:

$$CODE1$$


Un ejemplo de ejecución sería:

HolaQueTal

=> 8 15 12 1 17 21 5 20 1 12


Vale muchas gracias eso me ha servido, pero también quiero la manera de digitar un código digamos 0 1 3 7 2 y que cada uno de esos número represente una letra, y que por ende el resultado me de letras. Me explico, 0=A 1=B 3=S 7=Q 2=U por ejemplo, que al yo digitar algún número, se me reproduzca la letra. Perdón lo intenso gracias de ante mano

Aka Camilo, viejo zorro / Cibersecurity & Network administrator / Cisco CCNA R&S Certified / Systems & Telecommunications Engineer / Bad boy, rude boy, skin boy.
Para eso hacemos ingeniería inversa sobre las funciones que hemos hecho antes. Primero una nueva función que devuelva un entero correspondiente a la letra en la tabla ASCII:

int convierteNumero(int num)
{
	// Devuelve directamente su número del abecedario.
	return num + 'A';
}



Después, asumiendo que la secuencia de números se pasará por una cadena separada por espacios, de la siguiente forma de ejemplo: "1 2 3 4 5 6", la función siguiente se encargará de ir cogiendo cada uno de los números separados por espacios e ir imprimiendo cada una de las letras correspondientes llamando a la función anterior:

void imprimeFrase(char *cadnumeros) // Cambia el nombre de la función que te he dicho antes por imprimeNumeros(char *)
{
int i=0, num, tam;

while(sscanf(cadnumeros, "%d%n", &num, &tam) == 1)
{
printf( "%c", (char)convierteNumero(num)); // Imprime carácter
cadnumeros += tam; // Pasa al siguiente número
i++; // Incremento de contador
}
}

(Cita para ver bien el código)


Solo quedaría llamar a la función imprimeFrase desde el main por ejemplo de la siguiente forma:

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

(...)

int main()
{
	imprimeFrase("7 0 1 19 8 20 12");
	
	return 0;
}


Obteniendo como resultado lo siguiente por salida estándar:

=> HABTIUM

Perro viejo de Habbo y de HabboStium. Y lo mismo en la vida real, pero sin el "perro".