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

lonaur Messages postés 2 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 29 janvier 2005 - 29 janv. 2005 à 14:34
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 1 févr. 2005 à 10:09
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

BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
29 janv. 2005 à 14:54
if(buff[i] == 'é') buff[i] = 'e';
c'est quoi le problème ???

ciao...
BruNews, MVP VC++
0
lonaur Messages postés 2 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 29 janvier 2005
29 janv. 2005 à 14:57
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
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
29 janv. 2005 à 15:04
switch(buff[i]) {
case 'é': case 'è': etc....
buff[i] = 'e'; break;
.....

ciao...
BruNews, MVP VC++
0
Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009
29 janv. 2005 à 15:23
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
...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 1
1 févr. 2005 à 10:09
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!
0
Rejoignez-nous