Echange des caractères accentués par leurs homologues non accentués

Signaler
Messages postés
2
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
29 janvier 2005
-
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
-
Voilà j'ai un petit problème. Je lis un fichier et je supprime tous les caractères de ponctuation. Le problème c'est que lorsque je rencontre un caractère accentué, la fonction ispunct() ne marche pas. Du coup, j'aimerais pouvoir lire un texte dans un fichier en supprimant tous les caractères accentués pour les remplacer par un caractère non accentué. Par exemple, si j'ai dans mon fichier

Un été superbe.

j'aimerais lire en fait

Un ete superbe.

Je ne sais pas si c'est très clair mais j'ai vraiment besoin de votre aide.
Merci d'avance à celles et ceux qui me répondront.

5 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
if(buff[i] == 'é') buff[i] = 'e';
c'est quoi le problème ???

ciao...
BruNews, MVP VC++
Messages postés
2
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
29 janvier 2005

Il faut que de fasse toute une cascade de if pour pouvoir prévoir tous les cas des caractères spéciaux. C'est un peu long quand même mais bon pas de choix alors
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
switch(buff[i]) {
case 'é': case 'è': etc....
buff[i] = 'e'; break;
.....

ciao...
BruNews, MVP VC++
Messages postés
231
Date d'inscription
mercredi 12 février 2003
Statut
Membre
Dernière intervention
7 juillet 2009

En moins bourrin, on peut voir le truc sous cette forme:

if (buff[i] > 231 && buff[i] < 236) buf[i] = 'e'; //accents des "e" minuscules
else if (buff[i] > 223 && buff[i] < 230) buff[i] = 'a'; //accents des "a" minuscules
else if (buff[i] > 209 && buff[i] < 215) buff[i] = 'O'; //accent des "O" majucules
...
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
Joli Hades....

voici la fonction dont il pourra s'inspirer directement:
promis, je la reprend prochainement a ta façon Hades
++

___

void BString::convertEnMajuscule()
{
/// ---------------------------------------------------------------
/// ---------------- BString::convertEnMajuscule() ----------------
/// ---------------------------------------------------------------
/// ----- Objectif : convertir la chaîne en majuscule
/// ----- Auteur(s) : Magic Nono 03/01/04
/// ----- PreCond : texte avec les caracrères d'usage Français
/// ----- PostCond : /
/// ----- Etat : 1 (-1<0<1<2)
/// ----- Nota 03/01/04 : uniquement les car minuscules...
/// ----- MaJ 17/05/04 : conversion des caractères accentués français et du C cédille
/// ---------------------------------------------------------------
/// ----- Var Utilisées de la classe (2) : m_iTaille ,m_str
/// ----- Var Internes à la fonction (3) : c ,cste ,i
/// ----- Var Utilisées par adresse (1) : m_str
/// ----- Var Masquées (1) : m_str
/// ----- Var In (1) : m_iTaille
/// ----- Var In-Out (1) : m_str
static const char cste='A'-'a';
char c;
size_t i;
for(i=0;i<m_iTaille;i++)
{
c=m_str[i];
if(c>='A'&&c<='Z')
; //ne rien faire !!
else
if(c>='a'&&c<='z')
m_str[i]=(char)(c+cste); //transtypage pour éviter warning...
else
switch(c)
{
case'à':
case'â':
case'ä':
m_str[i]='A';
break;
case'é':
case'è':
case'ê':
case'ë':
m_str[i]='E';
break;
case'ï':
case'î':
m_str[i]='I';
break;
case'ö':
case'ô':
m_str[i]='O';
break;
case'ü':
case'û':
case'ù':
m_str[i]='U';
break;
case'ç':
m_str[i]='C';
break;
}
}
}

___
Magic Nono: l'informagicien!