Normaliser des lettres

Fermé
firas scofield Messages postés 14 Date d'inscription dimanche 30 mars 2014 Statut Membre Dernière intervention 5 novembre 2016 - 3 déc. 2015 à 23:07
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 7 déc. 2015 à 10:23
salut

je veux corriger lettres d'un mot de façon que lorsque je trouve un caractere comme(é,è) je le remplace par 'e'

et à par 'a' ....

j'ai essayer avec ce code mais n'a pas marché
void conv(char mot[27])
{
    int i;
        for(i=0;i<strlen(mot);i++)
     switch(mot[i])
     {
case 'à':case 'á':case 'â' :case 'ã': case'ä' :case 'å':
        mot[i]='a';
        case 'ç':
    mot[i]='c';
    case 'è':case 'é':case 'ê' :case 'ë':
        mot[i]='e';
        case 'î':case 'í':case 'ì' :
         mot[i]='i';
        case 'ò':case 'ó':case 'õ' :case 'ö':
            mot[i]='o';
        case 'ú':case 'û':case 'ü' :
            mot[i]='u';
             case 'ñ':
                 mot[i]='n';
             default:
                mot[i]=toupper(mot[i]);
     }
     for(i=0;i<strlen(mot);i++)
        mot[i]=toupper(mot[i]);
}

2 réponses

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 4/12/2015 à 15:02
Salut firas scofield,

C'est quoi que tu normalises : la saisie ? Tu récupères une saisie en Unicode ?


Dal
0
firas scofield Messages postés 14 Date d'inscription dimanche 30 mars 2014 Statut Membre Dernière intervention 5 novembre 2016
5 déc. 2015 à 06:00
c'est à dire lorsque je saisie une chaine de caractere comme 'aprés' il me retourne 'apres' , .... je veut eliminer tous les lettres speciaux comme é,è,à... et les remplacer par des lettres alphabetique e,a..
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
6 déc. 2015 à 19:02
Bonjour,

Tu peux aussi passer par 2 tableaux :
char source[]="àéèêë...";
char destination[]="aeeee...";

Et ensuite tu fais une boucle for sur tous les caractères de source, et tu remplaces source[i] par destination[i] dans la chaîne de caractères de ton choix (tu peux utiliser la fonction strchr()).

Sinon, attention à la gestion des caractères... Quel encodage utilises-tu ?
Cdlt,
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
7 déc. 2015 à 10:21
@faiddy : salut fiddy, bonne idée !

@firas : il faut que ton terminal avec lequel tu récupères la saisie utilise le même encodage de caractères que ton code source, sinon, tu vas comparer des choses différentes. Là ce que tu as copié sur le forum semble être de l'Unicode (ou du moins c'est comme cela que CCM l'envoie à mon navigateur), et ton code n'est pas conçu pour traiter de l'Unicode et ne compile pas chez moi car ces caractères Unicode sont encodés sur plus d'un char...

En supposant que ta saisie n'est pas en Unicode, et que chaque caractère que tu récupères par la saisie est encodé sur un seul char, pour simplifier, tu pourrais faire la chose suivante :
- faire un programme où tu saisis à la ligne de commande ces caractères accentués,
- et qui affiche la valeur numérique du char correspondant, que tu notes
- utiliser ensuite ces valeurs numériques dans ton programme pour normaliser ta saisie

Ta normalisation fonctionnera sur ton poste et sur tous les postes où le terminal utilise le même encodage.

Sous Windows tu détermines l'encodage actuellement utilisé par le terminal CMD en utilisant la commande chcp. Tu peux éventuellement aussi trouver ces codes avec des tables affichant les codes pour le "code page" utilisé par Windows.


Dal
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 7/12/2015 à 11:04
@fiddy : salut fiddy, bonne idée !

@firas : il faut que ton terminal avec lequel tu récupères la saisie utilise le même encodage de caractères que ton code source, sinon, tu vas comparer des choses différentes. Là ce que tu as copié sur le forum semble être de l'Unicode (ou du moins c'est comme cela que CCM l'envoie à mon navigateur), et ton code n'est pas conçu pour traiter de l'Unicode et ne compile pas chez moi car ces caractères Unicode sont encodés sur plus d'un char...

En supposant que ta saisie n'est pas en Unicode, et que chaque caractère que tu récupères par la saisie est encodé sur un seul char, pour simplifier, tu pourrais faire la chose suivante :
- faire un programme où tu saisis à la ligne de commande ces caractères accentués,
- et qui affiche la valeur numérique du char correspondant, que tu notes
- utiliser ensuite ces valeurs numériques dans ton programme pour normaliser ta saisie avec le procédé de ton choix (switch/case ; tableaux de substitutions ...)

Ta normalisation fonctionnera sur ton poste et sur tous les postes où le terminal utilise le même encodage.

Sous Windows tu détermines l'encodage actuellement utilisé par le terminal CMD en utilisant la commande chcp. Tu peux éventuellement aussi trouver ces codes avec des tables affichant les codes pour le "code page" utilisé par Windows.


Dal
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 7/12/2015 à 10:24
@faiddy : salut fiddy, bonne idée !

@firas : il faut que ton terminal avec lequel tu récupères la saisie utilise le même encodage de caractères que ton code source, sinon, tu vas comparer des choses différentes. Là ce que tu as copié sur le forum semble être de l'Unicode (ou du moins c'est comme cela que CCM l'envoie à mon navigateur), et ton code n'est pas conçu pour traiter de l'Unicode et ne compile pas chez moi car ces caractères Unicode sont encodés sur plus d'un char...

En supposant que ta saisie n'est pas en Unicode, et que chaque caractère que tu récupères par la saisie est encodé sur un seul char, pour simplifier, tu pourrais faire la chose suivante :
- faire un programme où tu saisis à la ligne de commande ces caractères accentués,
- et qui affiche la valeur numérique du char correspondant, que tu notes
- utiliser ensuite ces valeurs numériques dans ton programme pour normaliser ta saisie avec le procédé de ton choix (switch/case, méthode de fiddy,...)

Ta normalisation fonctionnera sur ton poste et sur tous les postes où le terminal utilise le même encodage.

Sous Windows tu détermines l'encodage actuellement utilisé par le terminal CMD en utilisant la commande chcp. Tu peux éventuellement aussi trouver ces codes avec des tables affichant les codes pour le "code page" utilisé par Windows.


Dal
0