Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Sustituir palabras

Estas en el tema de Sustituir palabras en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 02/02/2012, 04:18
Avatar de juanalbertosk8  
Fecha de Ingreso: noviembre-2011
Ubicación: Málaga, Spain, Spain
Mensajes: 10
Antigüedad: 12 años, 5 meses
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.
  #2 (permalink)  
Antiguo 03/02/2012, 00:13
Avatar de Jorge__  
Fecha de Ingreso: enero-2012
Mensajes: 29
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Sustituir palabras

Se me ocurre algo asi:
Código C++:
Ver original
  1. #include <iostream>
  2. #include <vector>
  3.  
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.     int i, ban = 0, ban2 = 0;
  9.     size_t  aux;
  10.     string temp;
  11.     string texto;
  12.     vector <string> no_permitidas;
  13.     vector <string> reemplazarx;
  14.  
  15.     cout << "Introduzca una cadena de texto: ";
  16.     getline(cin, texto);
  17.     cout << endl;
  18.  
  19.     cout << "Para finlizar ingreso de palabras escriba -f" << endl << endl;
  20.  
  21.     while(ban == 0){
  22.         cout << "Palabra ha reemplazar: ";
  23.         cin >> temp;
  24.         if(temp == "-f"){
  25.             ban = 1;
  26.         }else{
  27.             for(i = 0; i < no_permitidas.size() ; i++){
  28.                 aux = no_permitidas[i].rfind(temp);
  29.                 if(aux!=string::npos){
  30.                     ban2 = 1;
  31.                     break;
  32.                 }
  33.             }
  34.             if(ban2 != 1){
  35.                 no_permitidas.push_back(temp);
  36.                 cout << "Palabra de reemplazo:";
  37.                 cin >> temp;
  38.                 reemplazarx.push_back(temp);
  39.             }else{
  40.                 cout << "Esta palabra ya fue ingresada." << endl;
  41.                 ban2 = 0;
  42.             }
  43.         }
  44.     }
  45.  
  46.     for(i = 0; i < no_permitidas.size() ; i++){
  47.         aux = texto.rfind(no_permitidas[i]);
  48.         if(aux!=string::npos){
  49.             texto.replace(aux,no_permitidas[i].length(),reemplazarx[i]);
  50.         }
  51.     }
  52.  
  53.     cout << endl << texto << endl << endl;
  54.  
  55.     return 0;
  56. }

Última edición por Jorge__; 03/02/2012 a las 00:22 Razón: validar si una palabra ha reemplazar ya fue ingresada.

Etiquetas: palabras, string, struct, sustituir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:46.