Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: MellaSystems en 1 Marzo 2015, 21:40 PM

Título: Ayuda... Necesito imprimir los caracteres que mas se repiten de una cadena
Publicado por: MellaSystems en 1 Marzo 2015, 21:40 PM
Tengo esta funcion pero no me tira todos los caracteres repetidos
Código (cpp) [Seleccionar]

void ImpCaractRepetidos(){
                         int contador=0;
                         int aux=0;
                         char c;
                         for(int i=0; CadCar[i]!='\0';i++){
                           for(int j=1; j<CadCar.length();j++){
                              if(CadCar[i]==CadCar[j]){
                                contador++;
                              }       
                           }
                           if(contador > aux){
                              aux = contador;
                              c = CadCar[i];
                              contador = 0;         
                                       }
                              else
                                   contador = 0;
                           
                         }
                         std::cout<<"\nEn el texto hay "<<aux<<" caracteres repetidos\n";
                         std::cout<<" y son "<<c;
                       }


Gracias por la ayuda
Título: Re: Ayuda... Necesito imprimir los caracteres que mas se repiten de una cadena
Publicado por: engel lex en 1 Marzo 2015, 21:45 PM
usa el namespace std para no andar escribirndo std:: antes de cada cout, cin,etc...

crea un array int con 26 posiciones (una por letra) y por cada letra sumas uno en la posición respectiva



Título: Re: Ayuda... Necesito imprimir los caracteres que mas se repiten de una cadena
Publicado por: MellaSystems en 1 Marzo 2015, 22:54 PM
mira asi hice la funcion ahora pero no me imprime nada  :-[

Código (cpp) [Seleccionar]

void ImpCaractRepetidos(){
                         int abecedario[26];
                         int i,caracter;
                         for( i=0; i<26; i++){
                                 abecedario[i]=0;
                                 }
                         while (CadCar[i]!='\0'){
                                 caracter = tolower(CadCar[i]);
                                 if ( caracter >= 97 && caracter <= 122)
                                   abecedario[caracter - 97]++;
                                   }
                           for ( i = 0; i < 26; i++ )
                           {
                           std::cout<<"La Letra "<< abecedario[i] <<"Aparecio"<< i+97<<"Veces\n";
                           }
                       }
Título: Re: Ayuda... Necesito imprimir los caracteres que mas se repiten de una cadena
Publicado por: engel lex en 1 Marzo 2015, 23:19 PM
errores lógicos para llevar XD

Código (cpp) [Seleccionar]
while (CadCar[i]!='\0'){
   caracter = tolower(CadCar[i]);
   if ( caracter >= 97 && caracter <= 122)
   abecedario[caracter - 97]++;
}


i lo reiniciaste a 0? recuerda que while no lo hace... agradece que está por el for apuntando al \0 final, si no, el while fuera infinito, porque tampoco avanza (no tiene un i++)

Código (cpp) [Seleccionar]
std::cout<<"La Letra "<< abecedario[i] <<"Aparecio"<< i+97<<"Veces\n";

daría... "La Letra 0Aparaecio97Veces, corrigiendo espacios y corrigiendo la logica de la frase

Código (cpp) [Seleccionar]
std::cout<<"La Letra "<< (char)i+97 <<" Aparecio "<< abecedario[i] <<" Veces\n";

el "(char)" es un casting, que convierte el tipo, a ese, es decir "i+97" se convierte en char y se muestra como eso
Título: Re: Ayuda... Necesito imprimir los caracteres que mas se repiten de una cadena
Publicado por: MellaSystems en 1 Marzo 2015, 23:55 PM
bueno esta bien brother gracias por la sugerencias mira:

Código (cpp) [Seleccionar]

void ImpCaractRepetidos(){
                         int abecedario[26];
                         int i,caracter;
                         for( i=0; i<26; i++){
                                 abecedario[i]=0;
                                 }
                         while (CadCar[i]!='\0'){
                                 i++;
                                 caracter = tolower(CadCar[i]);
                                 if ( caracter >= 97 && caracter <= 122)
                                   abecedario[caracter - 97]++;
                                   }
                           for ( i = 0; i < 26; i++ )
                           {
                           std::cout<<"La Letra "<< ((char)i+97) <<" Aparecio "<< abecedario[i] <<" Veces\n";
                           }
                       }


y aun me da error jejejej
Título: Re: Ayuda... Necesito imprimir los caracteres que mas se repiten de una cadena
Publicado por: engel lex en 2 Marzo 2015, 00:21 AM
me cito...

Cita de: engel lex en  1 Marzo 2015, 23:19 PM
errores lógicos para llevar XD

Código (cpp) [Seleccionar]
while (CadCar[i]!='\0'){
   caracter = tolower(CadCar[i]);
   if ( caracter >= 97 && caracter <= 122)
   abecedario[caracter - 97]++;
}


i lo reiniciaste a 0? recuerda que while no lo hace... agradece que está por el for apuntando al \0 final, si no, el while fuera infinito, porque tampoco avanza (no tiene un i++)



si tienes dudas has

Código (cpp) [Seleccionar]
int abecedario[26];
                         cout << "i es:" << i << std::endl;
                         for( i=0; i<26; i++){
                                 abecedario[i]=0;
                                 }
                         cout << "i es:" << i << std::endl;
                         while (CadCar[i]!='\0'){
                                 i++;
                                 caracter = tolower(CadCar[i]);
                                 if ( caracter >= 97 && caracter <= 122)
                                   abecedario[caracter - 97]++;
                                   }
                         cout << "i es:" << i << std::endl;
                           for ( i = 0; i < 26; i++ )
                           {
                           std::cout<<"La Letra "<< ((char)i+97) <<" Aparecio "<< abecedario[i] <<" Veces\n";
                           }
                         cout << "i es:" << i << std::endl;
                       }


y ve cuanto da i en cada caso
Título: Re: Ayuda... Necesito imprimir los caracteres que mas se repiten de una cadena
Publicado por: MellaSystems en 2 Marzo 2015, 00:54 AM
Analisando tu codigo mira lo que logre....

Código (cpp) [Seleccionar]

for(int i = 0; i < CadCar.length(); i++) {
                         for(int j = i+1; j < CadCar.length(); j++) {
                          if(CadCar[j] == CadCar[i]) {
                          std::cout << "La letra " << CadCar[i] << " está repetida" << std::endl;
                          // quiero agragar un contador para cada palabraa 
                               }
                              }
                             }
                          }


me dice las palabras repetidas pero no las veces que se repiten jajajajjaajajaj
Título: Re: Ayuda... Necesito imprimir los caracteres que mas se repiten de una cadena
Publicado por: MellaSystems en 2 Marzo 2015, 01:54 AM
alguien que me de una manito ya tengo el programa que imprime el numero de veces que se repite una letra. Solo me hace falta comparar cual es mayor y no me sale.

Código (cpp) [Seleccionar]

bool continuar = true;
                         int contador=0,cont_letras=0;
                         std::string c;
                         for(int i=0; CadCar[i] !='\0';i++){
                           for(int j=0; c[j] !='\0';j++){
                              if(CadCar[i]==c[j]){
                                continuar = false;
                                break;
                              }       
                           }
                           if(continuar = true){
                             for (int k = 0; CadCar[k] != '\0'; k++){
                                 if(CadCar[i]==CadCar[k]){
                                   contador++;
                                   }
                                 }
                                 std::cout << CadCar[i] << " se encuentra " << contador << " veces!" << std::endl;
                                 contador=0;
                             }
                           c[cont_letras] = CadCar[i];
                           cont_letras++;
                           continuar = true;
                           }
                           }
Título: Re: Ayuda... Necesito imprimir los caracteres que mas se repiten de una cadena
Publicado por: engel lex en 2 Marzo 2015, 03:41 AM
no hagas doble post, usa el boton modificar...

crea un array con 2 posiciones, la primera para el numero de la letra y la otra para la comparación de tamaño... realmente ando medio dormido y no entiendo el desastre de codigo anidado que hiciste...

así que haces otro for que recorra la palabra y

Código (cpp) [Seleccionar]
if(cantidad > variable[1]({
  variable[0]=letra;
  variable[1]=cantidad;
}