funcion sustituir en c++
Hola,estoy intentando hacer una funcion en c++ que lo que haga es: dada una linea de un fichero.txt y una palabra introducida por teclado, quiero que si esa palabra introducida,está en esa linea de fichero,me la cambie por otra palabra tb introducida por teclado. Este es mi codigo de dicha funcion, pero solo me funciona cuando la palabra a cambiar esta al principio de la linea, si esta x el medio o el final no lo hace.
void SustituirPalabra(string &frase,string palCambio,string palNueva) { int i=0,j=0,k=0,l=0; bool fin=false; string aux=""; string parte1=""; string parte2=""; for(i=0;((i<(int)frase.length()-(int)palCambio.length() +1 )&& (fin==false));i++){ for(j=0;j<(int)palCambio.length();j++){ aux=aux+frase[i+j]; if(aux==palCambio){ for(k=0;k<i;k++){ parte1=parte1+frase[k]; } for(l=(i+palCambio.length());l<(int)frase.length();l++){ parte2=parte2+frase[l]; } frase=parte1+palNueva+parte2; fin=true; i=i+palNueva.length(); } } } } ¿Alguna sugerencia? Nesito ayuda es urgente!! Gracias. Un salu2. |
Luego lo miro con calma, pero veo que no limpias la variable aux antes del for de j, con lo que sólo lo hace bien al principio (de ahí que sólo te detecte la palabra al principio). Ademas el fin=true te hace que sólo encuentre sólo la primera coincidencia que encuentre, no se si es el propósito, pero no parece que es lo que quieras, ya que aumentas i para seguir leyendo por donde debe, pero al ponerle esta bandera, se sale y no sigue.
Saludos |
efectivamente, es lo que dice elzazu, no limpias la variable y lo que hace es ir sumando el texto, con lo que solo te funciona con la primera palabra...
Código PHP:
|
dios!no se m habia ocurrido!!aunque ya es tarde,lo probare de todas formas. Muchas gracias x la ayuda. salu2
|
Una sugerencia, usa las funciones miembro de la clase std::string para estos menesteres, todo tu código se hubiera quedado en:
void Replace(std::string& inOut, const std::string& value, const std::string newValue) { int pos = 0; while((pos = inOut.find(value, pos))!= -1) inOut.replace(pos,value.length(), newValue); } Que aparte de ser mas legible es mas eficiente. Un saludo. |
La franja horaria es GMT +2. Ahora son las 17:22. |
Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
ZackYFileS - Foros de Debate