"\" durch "\\" ersetzen

LordDeath

Erfahrenes Mitglied
Moin

Ich hab einen string path, der von einem Anwender eingegeben werden soll. Doch in dem String stehen die pfade mit nur einem "\" drin. Bsp: C:\test\test.txt" ich brauche aber eigentlich C:\\test\\test.txt. Wie kann ich in dem String die escape Sequenz durch einen Doppelten Backslash ersetzen?

Code:
#include <string.h>

...

string  path;
cin >> path;

path.Replace("\","\\");

bei Replace bringt er mir den Fehler mit der Escape Sequenz!
Kann mir da jemand helfen?

DarkGreetinx LordDeath
 
Wie du sicher weisst, maskierst du mit dem Escape andere Zeichen.

z.B. \t = TAB
oder \" = "

D.h. "\","\\"

wird zu einem String der ein Anführungszeichen enthält, dann kommt ein Komma und dann wird der String geschlossen. Das \\" steht damit ohne Anführungszeichen da und du müsstest eigentlich eine Compilerfehler bekommen.
Ich hoffe das war einigermassen verständlich :)

Du musst also schreiben
path.Replace("\\","\\\\");
Damit maskierst du das Escape Zeichen selbst.
Im ersten String erhältst du 1 Backslash im zweiten 2 Backslash
 
hi hab das mal getestet funktioniert aber nicht...

Code:
#include<string.h>
#include<conio.h>
#include<iostream.h>

void main(void)
{
 char eingabe[30];
 cin >> eingabe;
 cout << endl << eingabe << endl;
 eingabe.Replace("lol","zensiert");
 getch();
}

Fehlermeldung: "Auf linker Seite der Struktur ist . oder .* erforderlich."

kp was das ist ich sehe da keinen fehler..

rokni
 
Das ist klar, denn der "." Punkt Operator in C/C++ bedeutet, das auf ein Member einer Instanz eines Objekts (Klasse, Stuktur oder Union) zugegriffen werden soll.
In deinem Fall verwendest du aber ein char[] Array (also ein C-Basistyp) somit kannst du nicht die Methode "Replace" aufrufen, denn auf Basistypen können keine Methoden aufgerufen werden. So jetzt hängt es von dir ab ob du C oder C++ programmieren willst und ob du die C++ Klasse "string" oder ein nullterminiertes char[] Array verwenden willst.

Gruß Homer
 
Nachtrag

Außerdem verwende bitte nicht:
void main(void) das ist kein guter Stil.
Desweiteren sind die Header:
#include<string.h>
#include<iostream.h>
"depricated" was heißt sie sollten nicht mehr verwendet werden, da sie von aktuellen Kompilern nicht mehr unterstützt werden.
Statdessen verwendet man die "neuen" C++ Header:

#include<string>
#include<iostream>
Und gibt den Namespace mit an.

Außerdem ist die replace() Methode der std::string Klasse nicht so einfach anzuwenden.

Gruß Homer
 
danke @daniel. jo ich weiß das es kein guter header ist. hab das ja grad nur schnell geschrieben und habs so gemacht.
 
Zurück