6
votes

Remplacez les barres obliques vers l'avant avec des barres obliques ou deux slashes en arrière en C ++

donc j'ai une chaîne:

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


1 commentaires

Que se passe-t-il quand vous l'essayez?


5 Réponses :


21
votes

Je reçois une erreur de compilateur sur votre chaîne de la chaîne avec g ++, car elle contient des codes d'échappement non valides. Apparemment, MSVC produit des avertissements mais pas d'erreur pour cela (voir la réponse de Michael Burr). Donc, si vous utilisez vraiment le chemin , vous avez publié, modifiez les barres antidactivantes en double backslashes.

Correction de cela, je constate que votre code ne remplace que le premier back-backslash et laisse les autres. Peut-être que vous souhaitez utiliser std :: remplacer () , comme: xxx


7 commentaires

Je ne pense pas que cela fonctionnera. std :: Remplacer recherchera le \ caractère, mais il ne trouvera aucun dans la chaîne car le compilateur interprétera chaque \ comme un caractère d'échappement pour la lettre après.


@Maxpm, cette réponse est la meilleure façon de faire une recherche / remplacement d'un seul caractère. Mais il convient de noter que la chaîne réelle fournie par l'OP doit être corrigée correctement pour que cela fonctionne.


Mon installation de GCC (MINGW avec GCC 4.5.1) avec toutes les options que j'ai installées dans mon script pour invoquer g ++ (-wall probablement étant le seul qui compte) ne considère que le non valide \ u évasion Séquence ici une erreur. Tous les autres ne font que des avertissements. VC les considère tous les avertissements.


@Michael Burr: Je reçois un "nom de caractère universel incomplet" sur la "séquence d'évacuation inconnue" sur le reste. Toutes les erreurs. Ceci est g ++ 4.3.2 sur Debian avec -wall et -wextra .


@Fred: Soit GCC a changé la gravité de la "séquence d'évacuation inconnue" entre 4.5.1 et 4.5.2 à partir d'un avertissement à une erreur, ou peut-être que vous avez également -werror qui fait toutes les avertissements une erreur?


Depuis STD :: Remplacer (chemin.begin (), chemin.end (), '\\', '/'); Remplacez un seul caractère, l'allumera deux fois?


std :: remplacer devrait remplacer toutes les occurrences.



9
votes

Si vous avez quelque chose comme ceci:

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


0 commentaires

2
votes

est le "chemin de chaîne = ..." dans votre fichier source comme indiqué? Si tel est le cas, il n'y a pas de glaîmes au dos à remplacer.

Le programme suivant: xxx

sorties: xxx


Remarque: le programme ci-dessus compile (avec un tas d'avertissements) dans MSVC (via VS2010), mais avec GCC 4.5.1, je reçois une erreur: xxx

le Comportement de MSVC pour cette erreur (ou GCC pour cette matière) pourrait être configurable avec des options appropriées.


0 commentaires

2
votes

Autant que je sache, il n'y a aucun moyen de le faire à partir de la chaîne que vous avez spécifiée. Votre code tente d'échapper aux caractères u , r , d , v , p , etc.

Si la chaîne est codée dur, vous devrez utiliser des doubles slashes (c'est-à-dire c: \\ users \\ richard ... ).

Si la chaîne est un chemin qui, par exemple, l'utilisateur entre dans l'utilisateur, vous pourrez peut-être ajouter les caractères d'évacuation par programme.


1 commentaires

Si la chaîne est entrée de l'utilisateur, vous n'aurez plus besoin d'échapper à rien.



0
votes

essayez d'utiliser string.findfirsof ('\');


0 commentaires