Programación General => C/C++ => Mensaje iniciado por: powers en Viernes 9 de Abril de 2004, 07:55
Título: Evitar Repeticiones
Publicado por: powers en Viernes 9 de Abril de 2004, 07:55
Hello. En el siguien programa (hecho en borland c++) como hago para evitar q cuente las letras que se repiten?? ejemplo: escribo -> kiko resultado q muestra-> k=2, i=1, k=1, o=1 este es el quiero -> k=2, i=1, o=1
#include <iostream.h> #include <string.h> #include <ctype.h> #include<conio.h> #include<stdio.h> void main() { char cad[100],op; int cont,cont2,cont3,q; printf("\n\tPrograma de manejo de cadena v.1.0\n\n"); printf("Escriba una cadena (40 caracteres max.)\n "); gets(cad); q=strlen(cad); printf("%i",q);
cont3=1; for(cont=0;cont<q;cont++) { for(cont2=1;cont2<=q;cont2++) { if(cad[cont]==cad[cont2]){cont3=cont3+1;} if(cont2==q){printf("\n\nLa letra %c está presente %i vez/veces",cad[cont],cont3);if(cont2==q)cont3=0;} } } }
gracias ! ! ! !
Título: Re: Evitar Repeticiones
Publicado por: Oliverio en Viernes 9 de Abril de 2004, 12:45
hola, primero lo primero, tu problema esta en el diseño del algoritmo, no en el codigo. Si estas empesando con C/C++ primero trata de resolver el problema con pseudocodigo y dejar la implementacion para despues.
Suerte
PD: cambiar
Código: Text
cont3=1;
for(cont=0;cont<q;cont++){
for(cont2=1;cont2<=q;cont2++){
por
Código: Text
cont3=0;
for(cont=0;cont<q;cont++){
for(cont2=0;cont2<=q;cont2++){
resuelve el problema de que tu segunda cuenta del caracter no es correcta
Título: Re: Evitar Repeticiones
Publicado por: piyey en Miércoles 5 de Mayo de 2004, 03:57
Hola Powers, lo que pasa con ese codigo es que en cada repeticion de una letra ira diciendo las veces que se repite a partir de ella o algo mas o menos asi, esto es:
papapapa
p se repite 4 a se repite 4 p se repite 3 a se repite 4 p se repite 3 a se repite 4 p se repite 3 a se repite 4
Con lo que te entendi quieres algo asi:
papapapa
p se repite 4 a se repite 4
Si eso es lo que quieres tienes que hacer un arreglo que represente a cada una de las letras
Código: Text
int letras[26]={0};
esto sera un contador para cada una de ellas y luego hacer la comparacion para cada letra en un for y si encuentra la letra aumentar el contador de dicha letra
Código: Text
for(i='a';i<='z';i++)
{ for(j=0;j<tamaño;j++)
{ if(cadena[j]=='a')
letras[i-'a']++;
}
}
:comp:
o algo asi, si no entiendes me lo dices ya que puede tener algunos errores, lo que pasa es que estoy en un cyber y no tengo el compilador, asi que lo estoy haciendo al aire... :blink:
luego de eso para visualizar lo haces en otro for o en el cuerpo del primero pero despues del segundo, si letra[i-'a']!=0 entonces visualizas la letra i y el numero de repeticiones... :smartass: