backslash in String durch 2 Backslashes ersetzen
-
Hallo
ich möchte in einem String ein Backslash durch 2 Backslashes ersetzen. Dafür benutze ich zur Zeit diesen Code:int pos1 = 0; do { pos1 = folder.find(ersetzen3,pos); if (pos1 != 0) folder.replace(pos1,1,ersetzen2); } while (pos1 != 0);
Das Problem ist jedoch das wenn er den ersten Backslash ersetze hat wiederrum den erseten Backslash von den ersetzten findet.
Also C:\Programme\Rechner wird C:\\Programme\Rechner --> C:\\\Programme\Rechner -->C:\\\Programme\Rechner usw und nicht C:\\Programme\\Rechner
Wie kann ich dies realisieren?
Am Besten wäre ein Code beispiel.
-
Zwei Tricks:
- den String von hinten durchgehen und ersetzen
oder
- alles in einen neuen String kopieren
-
Crysis_02 schrieb:
ich möchte in einem String ein Backslash durch 2 Backslashes ersetzen.
Das ist mit sehr hoher Wahrscheinlichkeit Unsinn.
Wofür glaubst du das zu brauchen?
-
adfbhamrg schrieb:
Zwei Tricks:
- den String von hinten durchgehen und ersetzen
oder
- alles in einen neuen String kopierenwenn ich es von hinten durch gehe, dann wird es doch so:
C:\Programme\Rechner --> C:\Programme\\Rechner --> C:\Programme\\\Rechner --> C:\Programme\\\Rechner --> C:\Programme\\\\Rechner
oder etwa nicht?Wie meinst du das mit in einen neuen String kopieren?
-
Überpsring doch einfach den neuen Backslash.
#include <iostream> int main() { std::string pfad = "C:\\Programme\\Blabla\\"; for(unsigned i = 0; i < pfad.size(); ++i) if(pfad[i] == '\\') pfad.insert(i++, "\\"); std::cout << pfad; }
Aber wofür braucht man sowas?
-
Incocnito schrieb:
Überpsring doch einfach den neuen Backslash.
#include <iostream> int main() { std::string pfad = "C:\\Programme\\Blabla\\"; for(unsigned i = 0; i < pfad.size(); ++i) if(pfad[i] == '\\') pfad.insert(i++, "\\"); std::cout << pfad; }
Aber wofür braucht man sowas?
Super. Vielen Dank aht funktioniert. Ich brauche das als pfad für nen filestream.
-
BTW: Wenn du Boost nutzt kannst du http://www.boost.org/doc/libs/1_46_1/doc/html/boost/algorithm/replace_all.html einsetzen
MfG SideWinder
-
Crysis_02 schrieb:
wenn ich es von hinten durch gehe, dann wird es doch so:
C:\Programme\Rechner --> C:\Programme\\Rechner --> C:\Programme\\\Rechner --> C:\Programme\\\Rechner --> C:\Programme\\\\Rechner
oder etwa nicht?Nein
C:\Programme\Rechner --> C:\Programme\\Rechner ^ ^ | |
Die Pfeile zeigen auf den gleichen Index. Wenn du nach dem ersetzen regulär ein Zeichen nach vorne gehst, ist alles in Ordnung.
-
Auf welchem Betriebssystem bist du denn? Also bei Windows geht als Pfadangabe C:/irgendwas und C:[beliebig mehr backslashe]irgendwas, wobei in C++ erstere aufgrund der leichteren Verwendung von / einfacher ist. Ich check immer noch nicht wieso du das jetzt brauchst.
-
Incocnito schrieb:
Auf welchem Betriebssystem bist du denn? Also bei Windows geht als Pfadangabe C:/irgendwas und C:[beliebig mehr backslashe]irgendwas, wobei in C++ erstere aufgrund der leichteren Verwendung von / einfacher ist. Ich check immer noch nicht wieso du das jetzt brauchst.
Ja ich bin auf Windows aber
f.open(folder+"\\\\"+ filename+".csv", ios::out|ios::app);
braucht immer 2 Backslashes, weil es sonst "denkt", das der Slash zum datei name gehört und dann geht es nicht, weil Windows keine Dateien mit Slash im DAteiname erstellt.
-
SideWinder schrieb:
BTW: Wenn du Boost nutzt kannst du http://www.boost.org/doc/libs/1_46_1/doc/html/boost/algorithm/replace_all.html einsetzen
MfG SideWinder
die Boost Biblithek hatte ich auch schon gesehen, aber erstmal wolle ich das mit den "Standard C++"-Mitteln machen.
-
Crysis_02 schrieb:
Ja ich bin auf Windows aber
f.open(folder+"\\\\"+ filename+".csv", ios::out|ios::app);
braucht immer 2 Backslashes, weil es sonst "denkt", das der Slash zum datei name gehört und dann geht es nicht, weil Windows keine Dateien mit Slash im Dateiname erstellt.
WTF?
-
Crysis_02 schrieb:
Ja ich bin auf Windows aber
f.open(folder+"\\\\"+ filename+".csv", ios::out|ios::app);
braucht immer 2 Backslashes
Du brauchst nur dann doppelte Backslashes, wenn du einen Backslash in einem Literal in deinem Code hast, denn dort leitet der Backslash eine Escape-Sequenz ein. Wenn der Pfad irgendwo anders herkommt (Benutzereingabe, Datei, API-Funktion usw.), ist das nicht notwendig.
Dein ganzes Vorhaben ist grundlos. Wenn es bei dir trotzdem "nicht geht", liegt es an etwas anderem.