Foros del Web » Programación para mayores de 30 ;) » Programación General »

evitar repeticiones

Estas en el tema de evitar repeticiones en el foro de Programación General en Foros del Web. Hello. En el siguien programa (hecho en borland c++) como hago para evitar q cuente las letras que se repiten?? ejemplo: escribo -> kiko resultado ...
  #1 (permalink)  
Antiguo 08/04/2004, 23:51
 
Fecha de Ingreso: marzo-2004
Ubicación: Rep. Dominicana
Mensajes: 31
Antigüedad: 20 años, 8 meses
Puntos: 0
evitar repeticiones

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=0;
for(cont=0;cont<q;cont++)
{
for(cont2=0;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 ! ! ! !

Última edición por powers; 09/04/2004 a las 16:54
  #2 (permalink)  
Antiguo 13/04/2004, 09:24
 
Fecha de Ingreso: abril-2004
Ubicación: Chamical La Rioja ARG
Mensajes: 10
Antigüedad: 20 años, 7 meses
Puntos: 0
se me ocurre que se resulve con 2 for(s) , pero mostraria 2 veces el resultado de k

for x
for i
if x(x)=x(i)
c++
}
}
cout el caracter se repite c veces
}
  #3 (permalink)  
Antiguo 13/04/2004, 09:39
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

Yo lo que haria seria comprobar si esa letra ya existe antes en la cadena. Si existe, es que ya lo has mostrado. Algo como:
Código:
for(cont=0;cont<q;cont++)
{
  cont_antes=0;
  for(cont2=0;cont2<cont;cont2++)
  {
    if (cad[cont]==cad[cont2]) cont_antes++;
  }
  if (0==cont_antes) // si es 0 es que no estaba antes, contamos
  {
    for(cont2=0;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;}
    }
  }
}
Mas o menos asi.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 13/04/2004, 21:51
Avatar de artury  
Fecha de Ingreso: marzo-2004
Ubicación: Leon, Mexico
Mensajes: 210
Antigüedad: 20 años, 8 meses
Puntos: 0
Yo pienso que así:


#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=0;
for(cont=0;cont<q;cont++)
{ if (cad[cont]==0) continue; /* si la letra ya se conto antes, que pase a la siguiente letra*/
cont3=1; /* Inicializa en acumulador de repeticiones en 1 x q ya esta 1 vez */
for(cont2=cont+1; cont2 < q; cont2++) /*empieza a comparar con la letra que sigue */
{ if(cad[cont]==cad[cont2]) {cont3=cont3+1; cad[cont2]=0;} /*"borra la letra que ya se repitio */
} /* hasta que termina de comparar esribe */
printf("\n\nLa letra %c está presente %i vez/veces",cad[cont],cont3);
}
}
__________________
asi es eso del box
  #5 (permalink)  
Antiguo 28/04/2004, 10:26
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 22 años, 3 meses
Puntos: 1
a lo mejor llego un poco tarde, pero a mi se me ocurriría eliminar las ocurrencias de la letra según las vas procesando, si te interesa tener la cadena original deberías tener una copia de la cadena y procesar esa cadena en vez de la original

espero que te sirva de algo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:27.