Yo he conseguido que dando el patron y el texto me imprima por pantalla las palabras que contengan el patron, pero nose como seria meterle el sustituto y cambiar el patron por el sustituto en el texto.
Código C++:
Ver original
#include <iostream> #include <string> using namespace std; const unsigned MAX_PAL_DIST = 20; typedef string TArray[MAX_PAL_DIST]; struct TDatos{ TArray a; unsigned n; }; void contienePatron(const string& patron, TDatos& datos); bool permitida(const string& texto); bool contiene(const string& patron, const string& texto); bool repetida(const string& texto, const TDatos& datos); void pintaPalabras(const TDatos& datos); void contienePatron(const string& patron, TDatos& datos){ string texto; cout << "Introduzca texto terminado en 'FIN': "; while((texto!="fin")&&(datos.n<MAX_PAL_DIST)){ do{ cin >> texto; } while(!permitida(texto)); if((contiene(patron,texto))&&(!repetida(texto,datos))){ datos.a[datos.n] = texto; datos.n++; } } } bool permitida(const string& texto){ bool res = true; for(unsigned i=0;i<texto.size();i++){ if((texto[i]<'a')||(texto[i]>'z')){ res = false; break; } } return res; } bool contiene(const string& patron, const string& texto){ unsigned i = 0, cont = 0; bool res = false; while((texto[i]!=texto[0])&&(i<texto.size())){ i++; } while((cont<patron.size())&&(i<texto.size())){ if(texto[i]==patron[cont]){ res = true; i++; cont++; } else{ res = false; break; } } return res; } bool repetida(const string& texto, const TDatos& datos){ bool res = false; for(unsigned i=0;i<datos.n;i++){ if(datos.a[i]==texto){ res = true; } } return res; } void pintaPalabras(const TDatos& datos){ for(unsigned i=0;i<datos.n;i++){ cout << datos.a[i] << " "; } } int main() { TDatos datos; string patron, sustituto; do{ cout << "Introduzca patron: "; cin >> patron; cout << "Introduzca sustituto: "; cin>> sustituto; } while(!permitida(patron)); datos.n = 0; contienePatron(patron,datos); pintaPalabras(datos); return 0; }
Gracias.