Ayuda... Necesito imprimir los caracteres que mas se repiten de una cadena

Iniciado por MellaSystems, 1 Marzo 2015, 21:40 PM

0 Miembros y 2 Visitantes están viendo este tema.

MellaSystems

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

engel lex

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



El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MellaSystems

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";
                           }
                       }

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MellaSystems

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

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MellaSystems

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

MellaSystems

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;
                           }
                           }

engel lex

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;
}
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.