SoloCodigo

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
  1. cont3=1;
  2.   for(cont=0;cont&#60;q;cont++){
  3.     for(cont2=1;cont2&#60;=q;cont2++){
  4.  
por
Código: Text
  1. cont3=0;
  2.   for(cont=0;cont&#60;q;cont++){
  3.     for(cont2=0;cont2&#60;=q;cont2++){
  4.  
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
  1. int letras[26]={0};
  2.  

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
  1. for(i='a';i&#60;='z';i++)
  2. { for(j=0;j&#60;tamaño;j++)
  3.    {  if(cadena[j]=='a')
  4.            letras[i-'a']++;
  5.    }
  6. }
  7.  
  8.  

 :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:

see you!!! :devil:


Piyey.