[AYUDA] Remplazar cadena en un string C++

Iniciado por Noxware, 29 Noviembre 2014, 19:11 PM

0 Miembros y 1 Visitante están viendo este tema.

Noxware

Hola a todos, no soy programador de C++ pero estoy haciendo un proyecto y necesito q sea liviano y rapido y por ello necesito q este hecho en C++

Necesito remplazar los 3 espacios iniciales de un string.... en ocntre un codigo que es el siguiente y que funciona para remplazar strings:

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
using namespace std;

int main ()
{
    string str("one three two four");
    string str2("three");
    str.replace(str.find(str2),str2.length(),"five");
    cout << str << endl;
    return 0;
}


Pero cuando lo utilizo en mi proyecto me da error:

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>
#include <string>
#include <fstream>
using namespace std;

int main() {
  ifstream in("archivo.txt"); // Open for reading
  ofstream out("j.txt"); // Open for writing
  string s;
  string re("   ");
  while(getline(in, s)) // Discards newline char
   
    s.replace(s.find(re),re.length(),"");
    out << s << "\n"; // ... must add it back
   
  system("pause>nul");
}


(El programa copia un archivo llamado "archivo.txt" a otro llamado "j.txt" y tiene que quitar los 3 espacios q van a haber al inicio del string)....... pero da error......

Porque sucede esto????
"La mejor forma de conocer a una persona es viendo su código... o en una partida de ajedrez...

PD: Si no tengo faltas de ortografía es porque use el autocorrector."

avesudra

Hola francoyo1998, esto no es Python, en C++ hay que poner llaves para declarar los ámbitos, no es identándolo. Con tu código solo reemplazarías un triple espacio por cada línea, prueba así:
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>
#include <string>
#include <fstream>
using namespace std;

int main()
{
   ifstream in("archivo.txt"); // Open for reading
   ofstream out("j.txt");      // Open for writing
   string s;

   //string re("   ");    no es necesario...
   
   size_t position;
   
   if(in)
       while(getline(in, s)) // Discards newline char
       {
           // We find the first match
           position = s.find("   ");
           // We replace "   " until the method find dont find a new match.
           while(position != string::npos)
           {
               // We replace the rest of the matches
               s.replace(position, re.length(),"   ");
               position = s.find(re);
           }
           out << s << "\n"; // ... must add it back
       }
   else
       cout << "File couldn't be opened" << endl;
       
   //system("pause>nul");
   cin.get();
}


Lo del cin.get() es para que sea portable.

Saludos.
Regístrate en

Noxware

ajajajjaja se me olvido, no las vi xD

Muchas gracias

Ojala fuera Python :P
"La mejor forma de conocer a una persona es viendo su código... o en una partida de ajedrez...

PD: Si no tengo faltas de ortografía es porque use el autocorrector."

Noxware

#3
Algo aun no funciona, creo q dire de forma mas concreta lo q quiero.... si sabes un poco de batch sabes para q sirve el comando "net start" sin parametros.... el comando net start lista todos los servicios en ejecucion de la siguiente forma:

CitarSe han iniciado estos servicios de Windows:

   Acceso a dispositivo de interfaz humana
   Administración de aplicaciones
   Administrador de cuentas de seguridad
   Administrador de identidad de redes de mismo nivel
   Administrador de sesión del Administrador de ventanas de escritorio
   Adobe Acrobat Update Service
   Adquisición de imágenes de Windows (WIA)
   Agrupación de red del mismo nivel
   Aislamiento de claves CNG
   AMD External Events Utility
   AMD FUEL Service
   Aplicación auxiliar de NetBIOS sobre TCP/IP
   Aplicación auxiliar IP
   Archivos sin conexión
   Asignador de extremos de RPC
   Audio de Windows
   Centro de seguridad
   Cliente de directiva de grupo
   Cliente de seguimiento de vínculos distribuidos
   Cliente DHCP
   Cliente DNS
   Cola de impresión
   Compilador de extremo de audio de Windows
   Conexiones de red
   Detección de hardware shell
   Detección SSDP
   Dispositivo host de UPnP
   Energía
   Epson Scanner Service
   EPSON V3 Service4(04)
   Escritor VSS de SQL Server
   Escucha de Grupo Hogar
   Estación de trabajo
   Examinador de equipos
   Experiencia con aplicaciones
   Firewall de Windows
   Host de proveedor de detección de función
   Host del servicio de diagnóstico
   Iniciador de procesos de servidor DCOM
   Instrumental de administración de Windows
   Llamada a procedimiento remoto (RPC)
   Motor de filtrado de base
   Plug and Play
   Programador de aplicaciones multimedia
   Programador de tareas
   Protocolo de resolución de nombres de mismo nivel
   Proveedor de Grupo Hogar
   Publicación de recurso de detección de función
   Reconocimiento de ubicación de red
   Registro de eventos de Windows
   Servicio de caché de fuentes de Windows
   Servicio de compatibilidad de programas
   Servicio de detección automática de proxy web WinHTTP
   Servicio de directivas de diagnóstico
   Servicio de lista de redes
   Servicio de notificación de eventos de sistema
   Servicio de perfil de usuario
   Servicio de transferencia inteligente en segundo plano (BITS)
   Servicio de uso compartido de red del Reproductor de Windows Media
   Servicio enumerador de dispositivos portátiles
   Servicio Interfaz de almacenamiento en red
   Servicios de cifrado
   Servidor
   Sistema de eventos COM+
   SQL Server (SQLEXPRESS)
   Superfetch
   Temas
   Windows Defender
   Windows Driver Foundation - User-mode Driver Framework
   Windows Search

Se ha completado el comando correctamente.

pero yo necesito q se borren esos 3 espacios q hay antes del nombre de cada servicio y redirecionarlo a un archivo..... eso es todo.... pero no soy programador de C++ asi q me cuesta hacerlo a tan bajo nivel :/
"La mejor forma de conocer a una persona es viendo su código... o en una partida de ajedrez...

PD: Si no tengo faltas de ortografía es porque use el autocorrector."

Noxware

Ta gracias ya lo logre, habia una linea en tu codigo q me estaba esorbando para hacerlo, la remplaze y quedo todo funcionando, ya puedo seguir con mi proyecto, muchas gracias.
"La mejor forma de conocer a una persona es viendo su código... o en una partida de ajedrez...

PD: Si no tengo faltas de ortografía es porque use el autocorrector."