probleme accents caratere en C

probleme accents caratere en C - C - Programmation

Marsh Posté le 25-03-2007 à 13:16:09    

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.

Reply

Marsh Posté le 25-03-2007 à 13:16:09   

Reply

Marsh Posté le 25-03-2007 à 16:17:03    

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.

Reply

Marsh Posté le 25-03-2007 à 17:10:05    

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

Reply

Marsh Posté le 25-03-2007 à 17:21:42    

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.....

Reply

Marsh Posté le 25-03-2007 à 20:03:34    

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/
Reply

Marsh Posté le 25-03-2007 à 20:53:50    

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
Reply

Marsh Posté le 25-03-2007 à 21:32:11    

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
Reply

Marsh Posté le 25-03-2007 à 22:47:40    

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/
Reply

Marsh Posté le 25-03-2007 à 23:07:25    

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

Reply

Marsh Posté le 26-03-2007 à 07:30:29    

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

Reply

Marsh Posté le 26-03-2007 à 07:30:29   

Reply

Marsh Posté le 26-03-2007 à 16:54:23    

ç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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed