wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 3

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Problème avec le caractère accent circonflexe
Conversation : Problème avec le caractère accent circonflexe
21-11-2019 14:01:57  Problème avec le caractère accent circonflexe #1
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.
21-11-2019 18:38:01  Re: Problème avec le caractère accent circonflexe #2
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&#65533;ù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 )
28-11-2019 19:15:59  Re: Problème avec le caractère accent circonflexe #3
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.
04-12-2019 14:39:45  Re: Problème avec le caractère accent circonflexe #4
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.
04-12-2019 20:44:48  Re: Problème avec le caractère accent circonflexe #5
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 )
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Problème avec le caractère accent circonflexe