ejercicio abecegrama C error

Iniciado por juanpalomo098, 11 Enero 2017, 23:43 PM

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

juanpalomo098

Hola en este ejercicio tengo que decir si es un abecegrama (contenga todas las letras del abecedario solo una vez) y en caso contrario que diga cuantas veces se repite cada letra, contador debe ser una cadena.
Una ayudita por favor no lo consigo..
EDITO: creo que ya esta
#include<stdio.h>
#include<conio.h>
#include <ctype.h>
int main (){
int cadenacont[28],i,j;
char cadena[500];
char cadenabc[] ="abcdefghijklmnñopqrstuvwxyz";

printf("Introduzca cadena\n");
scanf("%s",cadena);
for(i = 0; cadena[i]!='\0'; i++)
      cadena[i] = tolower(cadena[i]);

for (j=0; j<28; j++){
cadenacont[j] = 0; }//contador a 0

for(i=0; cadena[i]!='\0';i++){//sumar caracteres dos bucles anidados

for(j=0; j<27; j++) {

if(cadena[i]==cadenabc[j]) {

cadenacont[j]++;break;
}
}
   }
for(j=0;j<=27;j++){
if(cadenacont[j]==1){}
else{break;}
}//comprobar si es abecegrama
if(j>=27){
printf("abecegrama");
}
else{
for(i=0; i<27; i++){
printf("%c = %d\n",cadenabc[i],cadenacont[i]);}

}
getch();
}

4dr14n31t0r

#1
Para empezar, lo tienes mal identado. Asi es casi imposible saber donde empieza y termina un bucle o un if...
Ademas, creo que no estaria de mal añadir algunos comentarios para aclarar lo que haces en el codigo.

#include<stdio.h>
#include<conio.h>
#include <ctype.h>
int main (){
//cadenacont[28] es un array que contiene el numero de apariciones de cada letra
int cadenacont[28],i,j;

//cadena[500] es el array que contiene la cadena que queremos comprobar
//su valor lo introducimos por teclado
char cadena[500];

//cadenabc[] es un array que contiene todas las letras del abecedario
char cadenabc[] ="abcdefghijklmnñopqrstuvwxyz";

printf("Introduzca cadena\n");
scanf("%s",cadena);

//ponemos en minuscula todas las letras que hemos introducido por teclado
for(i = 0; cadena[i]!='\0'; i++)
cadena[i] = tolower(cadena[i]);

for (j=0; j<28; j++){
cadenacont[j] = 0;
}//contador a 0

//cada vez que se encuentra una letra del abecedario incrementamos el numero de apariciones del mismo
for(i=0; cadena[i]!='\0';i++){//sumar caracteres dos bucles anidados
for(j=0; j<27; j++){
if(cadena[i]==cadenabc[j]){
cadenacont[j]++;
break;
}
}
}

//comprobamos que el numero de apariciones de cada letra es 1
for(j=0;j<=27;j++){
if(cadenacont[j]==1){

}
else{
break;
}
}//comprobar si es abecegrama

if(j>=27){
printf("abecegrama");
}
else{
for(i=0; i<27; i++){
printf("%c = %d\n",cadenabc[i],cadenacont[i]);
}
}
getch();
}

De todos modos, creo que deberia de funcionar, aunque desde luego hay muchas muy mejores formas de hacer este ejercicio.
Si te da algun error, describelo. Di que es lo que te pasa. ¿Sale alguna salida extraña por pantalla? ¿O simplemente te dice, por ejemplo, que son abecedegramas algunos strings que en realidad no lo son (o viceversa)?
Aunque no creo que tenga mucho que ver, el metodo main() retorna un int, asi que al final tienes que poner return 0;

juanpalomo098

#2
En primer lugar muchas gracias por contestar.
Al final lo conseguí y edite.
Funciona correctamente, el único problema que veo es que contiene una ñ, ademas de que habrá formas mucho mejores de hacerlo
PD: Me equivoque creo se llama pangrama perfecto