2010-12-14 9 views
5

So habe ich eine Zeichenfolge:Schrägstriche ersetzen rückwärts vorwärts oder Doppel rückwärts Schrägstriche in C schlitzt ++

string path = "C:\Users\Richard\Documents\Visual Studio 2010\Projects\Client\Debug"; 

Ich möchte alle rückwärts Schrägstriche in es mit nach vorn ersetzen, so dass es wie folgt aussieht:

C:/Users/Richard/Documents/Visual Studio 2010/Projects/Client/Debug 

Dies funktioniert nicht:

string toReplace = "\\"; 
path.replace(path.find(toReplace), toReplace.length(), "/"); 

Offensichtlich \ ist ein Escape-Zeichen, so dass wahrscheinlich verursacht th Das Problem.

+0

Wie genau funktioniert nicht? –

+0

Was passiert, wenn Sie es versuchen? –

Antwort

13

Ich bekomme einen Compiler-Fehler auf Ihrem path String mit g ++, da es ungültige Escape-Codes enthält. Anscheinend erzeugt MSVC Warnungen, aber keine Fehler dafür (siehe Michael Burrs Antwort). Wenn Sie also die von Ihnen gepostete path wirklich verwenden, ändern Sie die Backslashes in doppelte Backslashes.

Korrigieren, dass ich finde, dass Ihr Code nur den ersten Backslash ersetzt und die anderen zurücklässt. Vielleicht möchten Sie std::replace() verwenden, etwa so:

std::replace(path.begin(), path.end(), '\\', '/'); 
+4

Ich glaube nicht, dass das funktionieren wird. 'std :: replace 'sucht nach dem Zeichen \, aber es findet keine in der Zeichenfolge, da der Compiler jedes Zeichen als Escape-Zeichen für den nachfolgenden Buchstaben interpretiert. – Maxpm

+1

@ Maxpm, diese Antwort ist der beste Weg, eine Suche/Ersetzen eines einzelnen Zeichens zu tun. Es sollte jedoch beachtet werden, dass die tatsächliche Zeichenfolge, die vom OP bereitgestellt wird, ordnungsgemäß maskiert werden muss, damit dies funktioniert. –

+0

Meine Installation von GCC (MinGW mit GCC 4.5.1) mit allen Optionen, die ich in meinem Skript zum Aufruf von g ++ eingerichtet habe (-Wall ist wahrscheinlich die einzige, die zählt), betrachtet hier nur die ungültige \ \ "Escape-Sequenz als Fehler . Alle anderen sind nur Warnungen. VC betrachtet sie als Warnungen. –

9

Wenn Sie so etwas wie dieses:

string path = "C:\Users\Richard\Documents\Visual Studio 2010\Projects\Client\Debug"; 

es jedes Zeichen proceded durch '\' Sonderzeichen ist. Der richtige Weg ist

string path = "C:\\Users\\Richard\\Documents\\Visual Studio 2010\\Projects\\Client\\Debug"; 

Verwenden Sie Std :: ersetzen wie Fred sagte.

2

Ist der "string path = ..." in Ihrer Quelldatei wie gezeigt? Wenn dies der Fall ist, müssen keine Backslashes ersetzt werden.

Das folgende Programm:

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    string path = "C:\Users\Richard\Documents\Visual Studio 2010\Projects\Client\Debug"; 

    cout << path; 
} 

Ausgänge:

C:UsersRichardDocumentsVisual Studio 2010ProjectsClientDebug 

Anmerkung: Das obige Programm kompiliert (mit einem Bündel von Warnungen) in MSVC (durch VS2010), aber mit GCC 4.5.1 Ich bekomme einen Fehler:

C:\temp\test.cpp:8:19: error: incomplete universal character name \U 

Das Verhalten von MSVC für diesen Fehler (oder GCC in diesem Fall) ist möglicherweise mit entsprechenden Optionen konfigurierbar.

2

Soweit ich weiß, gibt es keine Möglichkeit, dies über die angegebene Zeichenfolge zu tun. Ihr Code versucht, die Zeichen zu entkommen U, R, D, V, P usw.

Wenn die Zeichenfolge hartcodiert ist, werden Sie haben Doppelschrägstriche verwenden (das heißt, C:\\Users\\Richard...).

Wenn die Zeichenfolge ein Pfad ist, den der Benutzer angibt, können Sie die Escape-Zeichen möglicherweise programmgesteuert hinzufügen.

+2

Wenn die Zeichenfolge Benutzereingabe ist, müssen Sie nichts entkommen. – UncleBens

0

Versuchen Sie es mit Zeichenfolge.findfirsof ('\');

Verwandte Themen