String replace
-
Hallo alle zusammen,
ich habe ein Win32-Programm geschrieben und darin meine vorher für die Konsole entworfenen Funktionen integriert. Ein Teil einr Funktion ist Folgendes:
for (int szPos = 0; szPos < pathName.size(); szPos++) { if (pathName.substr(szPos,1) == "\\") { pathName.replace(szPos, 1, "\\\\"); } }Kurze Erklärung: Nach der Pfadauswahl möchte ich den Pfad so verarbeiten, dass es für C++ zugreifbar wird, d.h. normale Backslashes durch doppelte BS ersetzen. Und aus irgendeinem Grund hat das Programm mit
"\\\\"ein heftiges Problem. Es kommt allerdings keine Fehlermeldung oder Ähnliches, das Programm bleibt einfach hängen...
Was ganz wichtig ist: ich habe anstatt "\\\\"mit anderen Zeichen probiert (z.B. mit Buchstaben) und es funktionierte einwandfrei! Meine nächste Idee war, es mit ASCII-Code, also(char)92probieren, habs aber bisher nicht hinbekommen, weil replace einen string verlangt und ASCII character gibt. Hat jemand eine Idee, wie ich mein Vorhaben umsetzen kann?Grüße
-
Dein Fehler ist rekrusion vermutlich. Du fügst an der jeweiligen Zelle zwei Zeichen ein, das zweite wird bei der nächsten Iteration auch noch erkannt und es wird noch ein eingefügt und ... . Also eintweder in Zeile 5 :
pathName.replace(szPos, 1, "\\\\");szPos++;oder einen Eingabestring und einen Ausgabestring erzeugen und beide dann beschreiben und nicht in einen gleichzeitig lesen und schreiben. Außerdem gibt es glaube ich bei den Strings noch etwas wiestrpos,find_first_ofoderindexof. So musst du nich alle Zeichen "durchlaufen".
-
Danke für deine Antwort! Du hast mir auf jeden Fall viel geholfen. Rekursion war offensichtlich, aber man kommt nicht immer selber drauf, wenn man den Code 100mal gesehen hat.

-
Wozu willst Du in einer Variablen die Sonderzeichen escapen? Das ergibt einen unsinngen Pfad. Escapen musst Du nur im Kode selbst.
-
[Rewind] schrieb:
Kurze Erklärung: Nach der Pfadauswahl möchte ich den Pfad so verarbeiten, dass es für C++ zugreifbar wird, d.h. normale Backslashes durch doppelte BS ersetzen.
Wurde zwar schon gesagt, ich will's aber noch mal ganz deutlich machen: du brauchst sowas nicht zu tun! Wenn du im Code '\' notierst, dann wird in den String ein Backslash geschrieben! Das hat einfach damit zu tun, dass der Backslash eine Escapesequenz einleitet und du für einen 'echten' Backslash ebenfalls eine Escapesequenz brauchst. Das heißt aber nicht, dass tatsächlich 2 Backslashes im String stehen. Sieh es dir vielleicht mal mit dem Debugger an, wenn es noch nicht klar ist. Du brauchst diese Ersetzung also nicht zu machen. Genauergesagt darfst du nicht, weil dein String damit unbrauchbar wird.