std::regex_replace - C++ - Programmation
Marsh Posté le 05-03-2022 à 18:32:16
Ce code le fait :
Code :
|
g++ -std=c++20 -o adhocstuff.exe adhocstuff.cpp
C'est du C++ 20 à cause de la ligne avec std::ranges::sort
Bon, j'ai pas été voir les conditions aux limites, c'était juste pour me faire la main avec un petit exercice, ça fait pas loin de 10 ans que j'avais rien codé dans ce langage. Et pour être propre, on pourrait stocker le nom de ce qui est a remplacer a chaque fois, et avancer de sa taille, au lieu d'avancer de 3 a chaque étape :
Code :
|
Cette dernière version est un peu plus robuste, supporte des variables manquantes et des variables avec des noms complexes.
Par contre, ce code ne saura pas remplacer plusieurs occurrences d'une même variable, il faudrait modifier un peu les structures de données pour cela.
A+,
Marsh Posté le 05-03-2022 à 20:32:13
Hello.
Merci pour ton code.
Je m'en suis finalement sorti comme ca :
Code :
|
Marsh Posté le 06-03-2022 à 10:31:18
Question bête : si z x et y valent toujours z x et y pourquoi utiliser une regex plutôt qu'une simple substitution de chaîne ?
Marsh Posté le 06-03-2022 à 13:02:20
L'ordre non plus n'a aucune importance si ça reste x y et z...
Marsh Posté le 06-03-2022 à 16:18:54
Je laisse les gens qui causent le C++ donner la bonne réponse, mais j'imagine que ça donne un truc du genre
pattern.replace(pattern.find("{x}" ),3,"42" );
(ou la même chose avec une boucle pour choper x y et z).
?
Marsh Posté le 06-03-2022 à 16:40:19
Je connais pas c++ mais dans la plupart des langages que je connais les regex sont nettement moins performant que des "rechercher / remplacer".
Par exemple en php on ferait:
Code :
|
Je supposes qu'il existe l'équivalent en c++...
https://www.google.com/search?q=c%2 [...] erformance
Après ce billet semble dire que Regex.Replace est le plus performant.
Marsh Posté le 06-03-2022 à 21:48:26
Oui, au final, pour ce qu'il veut faire, std::regex_replace est plus adapté, parce que il va pouvoir tenir compte du cas de plusieurs fois un {x} dans la chaine de départ.
Je vais adapter mon code pour l'utiliser :
Code :
|
Bref l'algo lui même se réduit à
Code :
|
Comme je l'ai dit, ça fait des années que j'ai pas fait de c++, je suppose qu'il y a des trucs plus efficaces que de copier une liste, la trier, et chercher deux éléments consécutifs identiques, comme j'ai fait à la bourrin, pour voir si la liste initiale contient des doublons.
Il y aurait bien ceci :
Code :
|
mais je subodore que c'est équivalent a ce que je fais voire un poil plus couteux.
A+,
Marsh Posté le 05-03-2022 à 15:01:33
Hello à tous,
Y'a t'il parmi vous des expert de la regex ? Malgré toute ma bonne volonté, mon cerveau segfault sur ces trucs.
Voici ce que je veux faire :
Je veux remplacer "{x}" par le contenu de la variable x, "{y}" par le contenu de la variable y et "{z}" par le contenu de la variable z.
Si vous voyez une autre solution, je suis preneur.
PS : l'ordre de {x}, {y} et {z} dans la variable pattern peuvent changer (donc exit printf).
Je vous remercie grandement pour votre aide.