Membres inscrits :2359
Membres en ligne : 0
Invités en ligne : 2


|
Conversation : Problème avec le caractère accent circonflexe |
Alfred83 (Membre)
Lieu: Toulon 83
Inscrit le : 28-12-2007
Messages: 50
Snippets: 0
Tutoriels: 0
Hors ligne |
Dans un programme qui crée du braille je dois remplacer dans une chaine la lettre "ù" par "^". Le remplacement se fait bien mais le caractère "^" est déporté en tête de la chaine, quelle que soit la façon d'écrire l'instruction ad hoc.
Code Cpp: string Chaine = "abcùùxyz"; i=3; ou Chaine.replace ( i, 2, "^^" ); ou Chaine = Chaine.substr( 0, i ) + "^^" + Chaine.substr ( i + 2 ); ou Chaine.replace ( i, 1, "^" ); Chaine.replace ( i + 1 , 1, "^" ); ou Chaine.replace ( i, 1, char(94) ); Chaine.replace ( i + 1 , 1, char(94) ); ou Chaine = Chaine.substr( 0, i ) + char(94) + char(94) + Chaine.substr ( i + 2 ); Chacune de ces instructions me donne "^^abcxyz" au lieu de abc^^xyz, les caractères "^" sont déportés en tête en tête de chaine. Le résultat est le même lorsque j'utilise une wxString.
Quelqu'un aurait-il une solution?
|
Informaticien bénévole du "Groupement des Intellectuels Aveugles ou Amblyopes" à Toulon, qui publie les trois quarts des livres en braille en France.
|
Gandi (Gourou de la secte)
Lieu: Clermont-Ferrand
Inscrit le : 10-10-2007
Messages: 222
Snippets: 5
Tutoriels: 0
Site web
Hors ligne |
Coucou
Voici le code que je te propose
Code Cpp: #include <iostream> #include <string> int main () { std::string str = "abcùùxyz"; std::cout << str << std::endl; std::string circumflex = "^"; std::cout << circumflex << std::endl; std::string a = "A"; std::cout << a << std::endl; str.replace(0, 1, a); std::cout << str << std::endl; str.replace(3, 2, circumflex); std::cout << str << std::endl; str.replace(4, 2, circumflex); std::cout << str << std::endl; return 0; }
Sortie:
Code:g++ -std=c++14 -pthread -O2 -Wall -Wextra -pedantic -pthread -pedantic-errors main.cpp -lm -latomic && ./a.out abcùùxyz ^ A Abcùùxyz Abc^ùxyz Abc^^xyz
Un lien pour tester via un shell c++: coliru
Le 2 est pour gérer le caractère non ACSSII «ù» qui lui est je suppose encodé sur 8bits et non sur 4bits. Je l'ai fait de manière empirique.
Ici la documentation de std::string::replace: http://www.cplusplus.com/reference/stri … g/replace/
Ici les charachtère spéciaux: https://fr.cppreference.com/w/cpp/language/escape
Ici la table ACSII: https://fr.cppreference.com/w/cpp/language/ascii
---------- Le problème ne vient pas du «^» mais du «ù». Ce dernier n'est pas un charactère ACSII.
Code Cpp:int main () { std::string str = "abcùùxyz"; std::cout << str << std::endl; std::string circumflex = "^"; std::cout << circumflex << std::endl; std::string a = "A"; std::cout << a << std::endl; str.replace(3, 1, a); std::cout << str << std::endl; return 0; }
Sortie:
Code:abcùùxyz ^ A abcA�ùxyz
Table unicode : https://unicode-table.com/fr/#00F9 ù unicode : U+00F9 html:
Code: ---------- tu pourrais passer tout en utf8 mais la console m'affiche des ? à la place des ù.
Mais le remplacement du caractère semble fonctionner.
Code Cpp:#include <iostream> #include <string> int main () { std::wstring str = L"abcùùxyz"; std::wcout << str << std::endl; std::wstring circumflex = L"^"; std::wcout << circumflex << std::endl; std::wstring a = L"A"; std::wcout << a << std::endl; str.replace(3, 1, a); std::wcout << str << std::endl; return 0; }
Du coup je te conseil de regarder de ce côté là (désolé je doit lacher mon ordinateur ) Écrire une application non anglaise wxConvAUto wxMBConv ISO/IEC 8859-15:1999
Dernière modification par Gandi (21-11-2019 20:53:55)
|
"Les ordinateurs ne remplaceront jamais les livres. Vous ne pouvez pas vous mettre sur une pile de disquettes pour atteindre le haut de votre armoire" ( Sam Ewing )
|
Alfred83 (Membre)
Lieu: Toulon 83
Inscrit le : 28-12-2007
Messages: 50
Snippets: 0
Tutoriels: 0
Hors ligne |
Merci beaucoup pour ces explications détaillées que je viens de découvrir. Je vais étudier tout cela. Bonsoir.
Dernière modification par Alfred83 (04-12-2019 14:38:11)
|
Informaticien bénévole du "Groupement des Intellectuels Aveugles ou Amblyopes" à Toulon, qui publie les trois quarts des livres en braille en France.
|
Alfred83 (Membre)
Lieu: Toulon 83
Inscrit le : 28-12-2007
Messages: 50
Snippets: 0
Tutoriels: 0
Hors ligne |
Finalement l'erreur était ailleurs. Je me suis focalisé par erreur sur ces replace qui fonctionnent très bien. Merci à toi, Gandi, pour le mal que tu t'es donné. Cela rassure de penser que l'on peut trouver de l'aide face à son problème.
|
Informaticien bénévole du "Groupement des Intellectuels Aveugles ou Amblyopes" à Toulon, qui publie les trois quarts des livres en braille en France.
|
Gandi (Gourou de la secte)
Lieu: Clermont-Ferrand
Inscrit le : 10-10-2007
Messages: 222
Snippets: 5
Tutoriels: 0
Site web
Hors ligne |
De rien, c'était très intéressant de fouiner sur cette problèmatique, de toute manière je vais devoir m'y mettre au milti-langue.
|
"Les ordinateurs ne remplaceront jamais les livres. Vous ne pouvez pas vous mettre sur une pile de disquettes pour atteindre le haut de votre armoire" ( Sam Ewing )
|
|