Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/02/2012, 04:18
Avatar de juanalbertosk8
juanalbertosk8
 
Fecha de Ingreso: noviembre-2011
Ubicación: Málaga, Spain, Spain
Mensajes: 10
Antigüedad: 13 años
Puntos: 0
Sustituir palabras

Buenas, tengo un ejercicio para la universidad que me pide que dando un patron, un sustituto y un texto, imprima por pantalla el texto y me cambie las palabras del patron que contenga el texto por el sustituto.

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
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. const unsigned MAX_PAL_DIST = 20;
  6. typedef string TArray[MAX_PAL_DIST];
  7. struct TDatos{
  8. TArray a;
  9. unsigned n;
  10. };
  11.  
  12. void contienePatron(const string& patron, TDatos& datos);
  13. bool permitida(const string& texto);
  14. bool contiene(const string& patron, const string& texto);
  15. bool repetida(const string& texto, const TDatos& datos);
  16. void pintaPalabras(const TDatos& datos);
  17.  
  18.  
  19. void contienePatron(const string& patron, TDatos& datos){
  20. string texto;
  21.  
  22. cout << "Introduzca texto terminado en 'FIN': ";
  23. while((texto!="fin")&&(datos.n<MAX_PAL_DIST)){
  24. do{
  25. cin >> texto;
  26. }
  27. while(!permitida(texto));
  28. if((contiene(patron,texto))&&(!repetida(texto,datos))){
  29. datos.a[datos.n] = texto;
  30. datos.n++;
  31.         }
  32.     }
  33. }
  34.  
  35. bool permitida(const string& texto){
  36. bool res = true;
  37.  
  38. for(unsigned i=0;i<texto.size();i++){
  39. if((texto[i]<'a')||(texto[i]>'z')){
  40. res = false;
  41. break;
  42.     }
  43. }
  44. return res;
  45. }
  46.  
  47. bool contiene(const string& patron, const string& texto){
  48. unsigned i = 0, cont = 0;
  49. bool res = false;
  50.  
  51. while((texto[i]!=texto[0])&&(i<texto.size())){
  52. i++;
  53. }
  54. while((cont<patron.size())&&(i<texto.size())){
  55. if(texto[i]==patron[cont]){
  56. res = true;
  57. i++;
  58. cont++;
  59. }
  60.  
  61. else{
  62. res = false;
  63.  
  64. break;
  65.     }
  66. }
  67. return res;
  68. }
  69.  
  70. bool repetida(const string& texto, const TDatos& datos){
  71. bool res = false;
  72.  
  73. for(unsigned i=0;i<datos.n;i++){
  74. if(datos.a[i]==texto){
  75. res = true;
  76.     }
  77. }
  78. return res;
  79. }
  80.  
  81. void pintaPalabras(const TDatos& datos){
  82. for(unsigned i=0;i<datos.n;i++){
  83. cout << datos.a[i] << " ";
  84.     }
  85. }
  86.  
  87. int main() {
  88. TDatos datos;
  89. string patron, sustituto;
  90.  
  91. do{
  92. cout << "Introduzca patron: ";
  93. cin >> patron;
  94. cout << "Introduzca sustituto: ";
  95. cin>> sustituto;
  96. }
  97. while(!permitida(patron));
  98. datos.n = 0;
  99. contienePatron(patron,datos);
  100. pintaPalabras(datos);
  101.  
  102. return 0;
  103. }


Gracias.