Ayuda cadena de ocurrencias

Iniciado por Skornz, 21 Abril 2017, 07:44 AM

0 Miembros y 1 Visitante están viendo este tema.

Skornz

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
# 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.

ivancea96

"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.

Fedex15

#2
Fijate este codigo si te sirve.


int cuenta_ocurrencias (char* str1, char* str2) {
if ((str1[0] == '\0') || (str2[0] == '\0')) return 0;
int str1Long = strlen(str1), str2Long = strlen(str2), iter = 0;
int i, j;
for (i = 0; i < str1Long; i++){
for (j = 0; ((j < str2Long) && (str2[j] == str1[j+i])); j++);
if (str2[j] == '\0'){ // Salio del for y si llego al final
iter++;             // Es porque la cadena 2 estaba en la cadena 1
}
}
return iter;
}

MAFUS

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.