Zeichen aus String löschen



  • string hat auch replace funktionen, aber für einzelne zeichen nimm GPCs variante.



  • In deinem Beispiel sieht es so aus, als ob du mit dem Pfad noch weiterarbeiten möchtest. Da wäre es ratsam das Zeichen zu entfernen und nicht nur zu ersetzen.



  • Ja ich will mit dem Dateinamen weiterarbeiten. Mein eigentliches Problem ist dass soblad sich ein Leerzeichen in meinem Pfad befindet, ein Anführungszeichen am Ende meines Dateinamen befindet. Ist keine Leerzeichen im Pfad ist auch kein Anführungszeichen da. Jetzt dachte ich mir ich nehm das Anführungszeichen einfach weg. Aber dann gibt mein Compiler mehrere Fehlermeldungen aus.

    Meinst Du mit entfernen gibt es das Problem nicht mehr?

    Wie entferne ich das Zeichen ohne es zu ersetzen?



  • Mittels der string::erase Funktion, auf die DarthZiu bereits verlinkt hat.



  • Was für Fehler gibt der Compiler dir denn aus?

    PS: Zum Entfernen kannst du entweder erase() verwenden oder (da es offenbar das letzte Zeichen des Namens ist) auch resize() - am besten in einer if()-Abfrage, mit der du den Wert vorher kontollierst.



  • Erklär uns doch mal bitte, was du vorhast. Ich glaube, du hast da nen Denkfehler drin. Denn das hier:

    Aeris schrieb:

    Mein eigentliches Problem ist dass soblad sich ein Leerzeichen in meinem Pfad befindet, ein Anführungszeichen am Ende meines Dateinamen befindet. Ist keine Leerzeichen im Pfad ist auch kein Anführungszeichen da.

    kann ich mir weder vorstellen noch erklären.



  • Ich hab es mit allem versucht, aber er macht es nicht, auch nicht mit

    destination.resize(destination.length()-1);
    

    Er gibt mir eine Fehlermeldung aus, und zwar

    Die Anweisung in 0x00c90003 verweist auf Speicher in 0x00c4dfc9. Der Vorgang written konnte nicht durchgeführt werden.

    und dann hab ich noch einen Rintime Error 216 at 00c90003



  • Aeris schrieb:

    Ich hab es mit allem versucht, aber er macht es nicht, auch nicht mit

    destination.resize(destination.length()-1);
    

    "er macht es nicht", was ist es? Was genau willst du tun, sprich dich aus...

    Er gibt mir eine Fehlermeldung aus, und zwar

    Die Anweisung in 0x00c90003 verweist auf Speicher in 0x00c4dfc9. Der Vorgang written konnte nicht durchgeführt werden.

    und dann hab ich noch einen Rintime Error 216 at 00c90003

    Sorry, aber ich kann noch nicht in deinen Speicher reinschauen, Code würde eher helfen. Ansonsten geh mit dem Debugger drüber.

    MfG

    GPC



  • char TextFeld(char *datei)
    {
            //Variablendeklaration
    
            int Wert;
            string destination;
    
            //Dateipfad auslesen
            string str = datei;
    
            // Erste Position von \ (von rechts gesehen) holen
            string::size_type pos = str.rfind('\\');
            if (pos != string::npos)
                    ++pos;
            else
                    pos = 0;
    
            //Neuen Ordner erstellen
    
            String Folder;
            Folder = "C:\\Neuer Ordner\\" ;
            _mkdir(Folder.c_str());
    
            //Zielpfad zusammensetzen
            destination = Folder.c_str() + str.substr(pos);
    
            //destination[destination.length()-1] = ' ';
            //destination.resize(destination.length()-1);
    
             //MessageBoxInhalt
            const char* Text = "Soll die Datei ersetzt werden?";
            const char* Kopf = "Datei bereits vorhanden!";
    
            //  Textfeld füllen
            FILINGSYSTEM->edtFILENAME->Text = datei;
    
            bool hatGeklappt = CopyFile(datei,destination.c_str(),true);
            if (hatGeklappt == false)
            {
                    Wert = Entscheidung(Text, Kopf);
                    if (Wert == 1)
                    {
                            bool hatGeklappt = CopyFile(datei,destination.c_str(),false);
                            MessageBox(NULL, str.substr(pos).c_str(), "Datei kopiert:", MB_OK);
                            if (hatGeklappt == true)
                                    MessageBox(NULL, "ja", "Datei kopiert:", MB_OK);
                            else
                                    MessageBox(NULL, str.substr(pos).c_str(), "Datei nicht kopiert:", MB_OK);
    
                    }
                    else
                           ;
    
            }
    
        return *datei;
    

    Mit "er macht es nicht" meine ich er kopiert mir meine Datei nicht in mein neues Verzeichnis. Das ist mein erstes C++ Programm sollte ich vielleicht erwähnen und tu mich dementsprechend hart.

    Er kopiert das File, solange im Quellverzeichnis kein Leerzeichen enthalten ist.



  • Hat noch jemand eine Idee?


Anmelden zum Antworten