Ver las NORMAS de estos Foros Web ZackYFileS Chat ZackYFileS Agregar a Favoritos Contactar con Administrador
 
 

TU PUBLICIDAD AQUÍ!!
Navegación
Retroceder   Foros ZackYFileS >
OTROS TEMAS DE INTERES - INTERNET:
> PROGRAMACIÓN Lenguajes: Visual Basic, C++, etc
Nombre de usuario
Contraseña
Configuración de UsuarioAyuda (FAQs)Nuevos PostsBuscar


Respuesta
 
Herramientas
Antiguo 25/04/2008, 14:54   #1
NH
Usuario Registrado
 
Fecha de ingreso: 29/dic/2004
Mensajes: 48
NH está en el buen camino
Red face 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.
NH está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Publicidad: Conoce las ofertas de ANUNCIATE
Antiguo 25/04/2008, 21:01   #2
ElZazu
Yerbagüena Pal Puchero
 
Avatar de ElZazu
 
Fecha de ingreso: 20/dic/2003
Mensajes: 5.810
ElZazu Poca gente ha conseguido tener esta reputaciónElZazu Poca gente ha conseguido tener esta reputaciónElZazu Poca gente ha conseguido tener esta reputaciónElZazu Poca gente ha conseguido tener esta reputaciónElZazu Poca gente ha conseguido tener esta reputaciónElZazu Poca gente ha conseguido tener esta reputaciónElZazu Poca gente ha conseguido tener esta reputaciónElZazu Poca gente ha conseguido tener esta reputaciónElZazu Poca gente ha conseguido tener esta reputaciónElZazu Poca gente ha conseguido tener esta reputaciónElZazu Poca gente ha conseguido tener esta reputación
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
__________________
ElZazu está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 25/04/2008, 22:24   #3
Coke-OFF
Invitado
 
Fecha de ingreso: 08/may/2007
Mensajes: 2.152
Coke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foro
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:
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() +)&& (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();
            }
        }
        
aux "";
    }


Última edición por Coke-OFF; 25/04/2008 a las 22:29.
Coke-OFF está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 28/04/2008, 19:25   #4
NH
Usuario Registrado
 
Fecha de ingreso: 29/dic/2004
Mensajes: 48
NH está en el buen camino
dios!no se m habia ocurrido!!aunque ya es tarde,lo probare de todas formas. Muchas gracias x la ayuda. salu2
NH está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 29/04/2008, 16:20   #5
SetFlag
Usuario Registrado
 
Fecha de ingreso: 29/abr/2008
Mensajes: 3
SetFlag está en el buen camino
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.
SetFlag está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Publicidad: Conoce las ofertas de ANUNCIATE
Respuesta


Usuarios viendo actualmente este tema: 1 (0 usuarios registrados y 1 visitantes)
 

Permisos para publicar mensajes
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los BB code están Activado
Los Emoticones están Activado
El código [IMG] está Activado
El Código HTML está Desactivado

Ir al foro

Temas similares
Tema Autor Foro Resp. Último mensaje
no tengo funcion suspender ford fiesta HARDWARE del PC - REPARACIONES y MEJORAS. 2 17/07/2007 05:49
funcion radio en el pigi j.reina TBOSTON 4500, NEW USAL y CLONES 8 08/03/2007 19:03
Función "Go to X" mathius IRD400/U4100 2 06/02/2005 06:34


!! ADVERTENCIAS !!: Las informaciones aquí publicadas NO CONTIENEN KEYS para la decodificación de ningún sistema: NO SON OPERATIVOS en sistemas SAT que precisen de su correspondiente suscripción.

ESTA TOTALMENTE PROHIBIDO EL USO DE ESTAS INFORMACIONES PARA LA MODIFICACIÓN O  DEFRAUDACIÓN DE SISTEMAS DE ACCESO CONDICIONAL.

ESTOS FOROS SON MODERADOS Y NO SE PERMITE LA PUBLICACIÓN DE INFORMACIONES ILEGALES POR PARTE DE LOS USUARIOS. EN CASO DE DETECTARSE ESTE TIPO DE INFORMACIONES, LOS USUARIOS SERÁN EXCLUIDOS DE ESTAS PÁGINAS.

USO DE COOKIES: Utilizamos COOKIES y de terceros para mejorar nuestros servicios y navegación por la web. Si continua navegando, consideramos que acepta su uso.  


La franja horaria es GMT +2. Ahora son las 08:37.


-------------------------------------------------------------------- --------------------------------------------------------------------

Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
Hispaservicios - J.G.C - 29112549T - Rio Cinca, 2, 30 (50180) SPAIN.
Todos los derechos reservados. Prohibida cualquier reproducion total o parcial.


Foros Patrocinados por anunciantes.