Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Skornz en 21 Abril 2017, 07:44 am



Título: Ayuda cadena de ocurrencias
Publicado por: Skornz en 21 Abril 2017, 07:44 am
Cuenta_Ocurrencias
Desarrolle un programa que dadas dos cadenas cad1 y cad2, determine la cantidad de veces que aparece la cadena cad2 en la cadena cad1, para ello implemente la función Cuenta_Ocurrencias que recibe las cadenas cad1 y cad2 y retorna la cantidad de veces que aparece cad1 en cad2.
Ejemplo 1:
cad1=”esto es muy sencillo”
cad2=”es”
al llamar a la función cuenta_ocurrencias deberá de retornar 2
Ejemplo 2:
cad1=”todo es posible en la medida que tu crees que es posible”
cad2=”e”
al llamar a la función cuenta_ocurrencias deberá retornar 9
Código:
# include <iostream>
using namespace std;
int cuenta_ocurrencias(char[],char[]);
int main(){
char cad1[100];
char cad2[100];
cin.getline(cad1,100);
cin.getline(cad2,100);
cout<<cuenta_ocurrencias(cad1,cad2);
return 0;
}
int cuenta_ocurrencias(char cad1[], char cad2[]){
int palabra=0;
for(int i=1; cad1[i]!='\0'; i++){
for(int j=1; cad2[j]!='\0'; j++){
if(cad1[i]==cad2[j]){
++palabra;
}
}
}
return palabra;
}

Mi problema es que debo agregarle para mi programa funcionen de manera como esta en los ejemplos, ya que  para el primer ejemplo que muestro que dice "esto es muy sencillo" deberia de contarme solo las "es" pero lo que tengo hecho me cuenta tambien la "se". Agradeceria mucho si alguien fuera tan amable de ayudarme con este codigo que tengo.


Título: Re: Ayuda cadena de ocurrencias
Publicado por: ivancea96 en 21 Abril 2017, 18:18 pm
"es" tiene 2 letras. En el segundo bucle for, cada vez que una letra coincide, agregas 1 a palabra.
Esa no es la forma. Lo que tienes que ver es que toda la cadena coincida. Si coincide, entonces sumas 1 a palabra.


Título: Re: Ayuda cadena de ocurrencias
Publicado por: Fedex15 en 21 Abril 2017, 19:51 pm
Fijate este codigo si te sirve.

Código
  1. int cuenta_ocurrencias (char* str1, char* str2) {
  2. if ((str1[0] == '\0') || (str2[0] == '\0')) return 0;
  3. int str1Long = strlen(str1), str2Long = strlen(str2), iter = 0;
  4. int i, j;
  5. for (i = 0; i < str1Long; i++){
  6. for (j = 0; ((j < str2Long) && (str2[j] == str1[j+i])); j++);
  7. if (str2[j] == '\0'){ // Salio del for y si llego al final
  8. iter++;             // Es porque la cadena 2 estaba en la cadena 1
  9. }
  10. }
  11. return iter;
  12. }
  13.  


Título: Re: Ayuda cadena de ocurrencias
Publicado por: MAFUS en 21 Abril 2017, 20:45 pm
Si puedes usar la biblioteca estándar puedes usar strstr que busca la primera ocurrencia entre dos cadenas, un poco de bricolaje y ya tienes tu función.