Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1063 connectés 

  FORUM HardWare.fr
  Programmation
  C

  probleme accents caratere en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme accents caratere en C

n°1533337
cyber81
Posté le 25-03-2007 à 13:16:09  profilanswer
 

Salut tout le monde,
Je veux transformer les lettres en majuscules. Je n'arrive pas a transformer celle avec accents, je ne sais pas pourquoi... Voici ma fonction :
 
 
 

Code :
  1. char Formatte_lettre_en_Majuscule (char lettre)
  2.     {
  3.         char lettre_a_retourner;
  4. /* les minuscules normales en Maj*/
  5.         if ((98<=lettre)&&(lettre<=122)) {lettre_a_retourner=lettre-32;}
  6.        
  7. /* les accentes en Majuscule */
  8.         else if (((lettre=='é')||(lettre=='è'))||((lettre=='ê')||(lettre=='ë'))) {lettre_a_retourner='E';}
  9.         else if (((lettre=='à')||(lettre=='â'))||(lettre=='ä')) {lettre_a_retourner='A';}
  10.         else if (((lettre=='ì')||(lettre=='ï'))||(lettre=='î')) {lettre_a_retourner='I';}
  11.         else if (((lettre=='ô')||(lettre=='ö'))||(lettre=='ò')) {lettre_a_retourner='O';}
  12.         else if (((lettre=='û')||(lettre=='ü'))||(lettre=='ù')) {lettre_a_retourner='U';}
  13.     else lettre_a_retourner=lettre;
  14.     return lettre_a_retourner;
  15.     }


 
 
 
Le probleme c'est que ca n'a pas l'air de reconnaitre les lettres avec accent... J'ai aussi essayé avec leur code ASCII :
 

Code :
  1. else if ((lettre==-21)||(lettre=-22).... )     {lettre_a_retourner=='E';}


.......
mais sans succes...
 
Si quelqu'un a une idee?
 
Merci de m'avoir lu.

mood
Publicité
Posté le 25-03-2007 à 13:16:09  profilanswer
 

n°1533373
zakinster
Posté le 25-03-2007 à 16:17:03  profilanswer
 

Salut,
Chez moi ca fonctionne :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. char Formatte_lettre_en_Majuscule (char lettre)
  4. {
  5.     char lettre_a_retourner;
  6.     /* les minuscules normales en Maj*/
  7.     if ((98<=lettre)&&(lettre<=122)) {lettre_a_retourner=lettre-32;}
  8.     /* les accentes en Majuscule */
  9.     else if (((lettre=='é')||(lettre=='è'))||((lettre=='ê')||(lettre=='ë'))) {lettre_a_retourner='E';}
  10.     else if (((lettre=='à')||(lettre=='â'))||(lettre=='ä')) {lettre_a_retourner='A';}
  11.     else if (((lettre=='ì')||(lettre=='ï'))||(lettre=='î')) {lettre_a_retourner='I';}
  12.     else if (((lettre=='ô')||(lettre=='ö'))||(lettre=='ò')) {lettre_a_retourner='O';}
  13.     else if (((lettre=='û')||(lettre=='ü'))||(lettre=='ù')) {lettre_a_retourner='U';}
  14.     else lettre_a_retourner=lettre;
  15.     return lettre_a_retourner;
  16. }
  17. int main()
  18. {
  19. printf("'%c'\r\n", Formatte_lettre_en_Majuscule('é'));
  20. return 0;
  21. }


 

Code :
  1. Lettre en majuscule : 'E'
  2. Press ENTER to continue.

n°1533383
cyber81
Posté le 25-03-2007 à 17:10:05  profilanswer
 

ah oui la fonction a l'air de marcher, ca me rassur, donc finalement ca doit etre ma boucle qui a un probleme...  Je devrais arriver a regler ca.
merci

n°1533385
cyber81
Posté le 25-03-2007 à 17:21:42  profilanswer
 

ai je le droit de modifier une chaine de caracteres... C'est peut etre pour ca en fait car je veux qu'en rentrant une phrase tous les accents soient enleves :
 
char* ma_phrase;
 
scanf("%s",ma_phrase);
 
for (n=0;n<taille_de_la_phrase;n++)
    {  
          ma_phrase[n]=Formatte_lettre_en_Majuscule(ma_phrase[n]);
     }
 
mais j'ai un doute il me semble bien que je n'ai pas le droit de modifier une chaine de caracteres en %s.....

n°1533425
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-03-2007 à 20:03:34  profilanswer
 

cyber81 a écrit :

ai je le droit de modifier une chaine de caracteres...


Une chaine littérale ? Non.

Citation :

Code :
  1. char* ma_phrase;
  2. scanf("%s",ma_phrase);



mais j'ai un doute il me semble bien que je n'ai pas le droit de modifier une chaine de caracteres en %s.....
Quelle chaine de caractères ? Je ne vois qu'un pointeur non initialisé. Le comportement est indéfini.
 
Tu devrais utiliser un tableau de char...
 

Code :
  1. char ma_phrase[128];
  2.    scanf ("%s", ma_phrase);


Mais attention :  
- pas de contrôle de débordement.
- la copie s'arrête au premier espace rencontré.
 
Je suggère fgets(), en pensant à proprement retirer le \n ou a purger en cas d'absence...
 
http://mapage.noos.fr/emdel/inputs.htm


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1533438
Pepsilite
Posté le 25-03-2007 à 20:53:50  profilanswer
 

tu as 2 fonctions en C qui font ça toutes seules :
strupr(string) te transforme la chaine en majuscule
strlwr(string) te transforme la chaine en minuscule  
 
;)
 
Par contre, ça ne traite pas les accents, il me semble...

Message cité 1 fois
Message édité par Pepsilite le 25-03-2007 à 20:56:06
n°1533445
Trap D
Posté le 25-03-2007 à 21:32:11  profilanswer
 

Sous Windows, ceci fonctionne très bien  

Code :
  1. #include <windows.h>
  2. #include <stdio.h>
  3. int main(void)
  4. {
  5. char buf[256];
  6. char buf1[256];
  7. fgets(buf, sizeof buf, stdin);
  8. OemToChar(buf, buf1);
  9. CharToOem(CharUpper(buf1),buf);
  10. puts(buf);
  11. return 0;
  12. }

et transforme n'importe quelle lettre accentuée en majuscule.


Message édité par Trap D le 25-03-2007 à 21:33:15
n°1533460
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-03-2007 à 22:47:40  profilanswer
 

Pepsilite a écrit :

tu as 2 fonctions en C qui font ça toutes seules :
strupr(string) te transforme la chaine en majuscule
strlwr(string) te transforme la chaine en minuscule  


Ces fonctions ne sont pas standards C.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1533464
Pepsilite
Posté le 25-03-2007 à 23:07:25  profilanswer
 

il suffit d'inclure <string.h>...

n°1533494
matafan
Posté le 26-03-2007 à 07:30:29  profilanswer
 

Non,c'est pas standard on t'as dit.

mood
Publicité
Posté le 26-03-2007 à 07:30:29  profilanswer
 

n°1533839
Taz
bisounours-codeur
Posté le 26-03-2007 à 16:54:23  profilanswer
 

ça va surtout ne marcher que si tu as un charset ou les caractères sont représentés avec un seul octet et que le codage du fichier source, le codage géré par le compilateur et le codage à l'exécution sont les mêmes.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  probleme accents caratere en C

 

Sujets relatifs
problème trim(), replaceAll()probleme avec mon site
Problème redirection vers mms:// et IE[Résolu] Probleme de calques entre IE et Firefox
Excel problème d'espace dans gestion de fonds[PROBLEME]Détection de Navigateur
Probleme decallage des images sous firefoxpetit problème pour transfert de valeurs dans liste à choix multiple
Probleme avec mon animation FlashProbleme recherche tableau
Plus de sujets relatifs à : probleme accents caratere en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR