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

  FORUM HardWare.fr
  Programmation
  C++

  [c] Transformer une chaîne de caractères en caractères minuscules

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c] Transformer une chaîne de caractères en caractères minuscules

n°132449
SMGFAN
Posté le 29-04-2002 à 19:15:56  profilanswer
 

Salut !!
 
J'aimerai savoir comment transformer une chaîne de caractères en caractères minuscules non accentués. Tout caractère autre que les caractères alphabétiques doivent être remplacés par des blancs.
 
Voilà du bon pain sur la planche !
 
Merci à tous !

mood
Publicité
Posté le 29-04-2002 à 19:15:56  profilanswer
 

n°132460
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-04-2002 à 19:44:24  profilanswer
 

Tu parcours la chaîne caractère par caractère.
Si c'est >= que 'A' et <= que 'Z' tu fais "caractère = caractère + ('a' - 'A';)"
Sinon tu vois si c'est un accent:
switch(caractère) {
 case 'é':
 case 'É':
 case 'è':
 ...
  caractère = 'e'; break;
 case 'á':
 ...
 default:
  catactère = ' ';break;
}
 
voilà un truc qui doit marcher, mais il y a peut-être moyen de faire plus optimisé.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°132464
torpe23
Posté le 29-04-2002 à 19:47:06  profilanswer
 

il doit y avoir une petite fonction du style "tolower()" qui existe ! cherche un peu !

n°132466
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-04-2002 à 19:51:11  profilanswer
 

LowerCase pour les AnsiString de Borland (c++) ou tolower dans la STL (C++) mais je crois qu'en C rien n'est prévu. De plus, pour le problème des accents et du remplacement des autres caractères... y a pas de solution toute faite je pense.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°133192
SMGFAN
Posté le 01-05-2002 à 23:00:13  profilanswer
 

Au secours, ca ne marche pas, et j'y comprends rien !! Pouvez vous m'aidez svp ?
 
Voilà ce que j'ai pour l'instant :
 
#include <stdio.h>
 
char tab[300],tabreduit[300];
 
 
char lecture(){
     int i,cpt=0;
     char nouvphrase[300];
     char choix='o';
 
     while (choix=='o';){
           printf("Veuillez entrer la phrase a saisir :\n" );
           fflush(stdin); /*vidage du buffer*/
           fgets(nouvphrase,300-strlen(tab),stdin);
           nouvphrase[strlen(nouvphrase)-1]=' '; /*remplacement du caractère de saut de ligne par un blanc*/
           strcat(tab,nouvphrase);
 
           printf("%s",tab);
 
           cpt++;
           printf("\nPhrase numero %d enregistree.",cpt);
 
           printf("\nVoulez-vous poursuivre la saisie ? (o/n) " );
           scanf("%c",&choix);
           printf("\n" );
           if (strlen(tab)>=300) return;
           }
 
     return;
}
 
 
char reduction(){
 
char car;
int i;
 
     for (i=0;i<300;i++){
         car=tab[i];
         if ((car>='A';)&&(car<='Z';)){
         car=car+('a'-'A';);
         tabreduit[i]=car;
         }
     }
     printf("%s",tabreduit);
}
 
 
main(){
     lecture();
     reduction();
}

n°133200
antp
Super Administrateur
Champion des excuses bidons
Posté le 01-05-2002 à 23:34:46  profilanswer
 

deja dans reduction ton for tu dois t'arrêter a la fin de la chaine:
 
for (i=0;i<300 && tab[i]>0;i++){
 
Sinon il se passe quoi exactement ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°133202
SMGFAN
Posté le 01-05-2002 à 23:39:56  profilanswer
 

Et bien justement, il ne se passe rien, c'est très bizarre... essaye de compiler tu verras...

n°133213
Tetragramm​aton IHVH
dieu unique =&gt; pensée unique
Posté le 02-05-2002 à 01:16:52  profilanswer
 

La fonction _strlwr convertit n'importe quelle string en minuscule.


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°133249
SMGFAN
Posté le 02-05-2002 à 09:32:43  profilanswer
 

Voilà où j'en suis :
 
void reduction(){
 
int i;
 
     for (i=0;i<300;i++){
         tabreduit[i]=tab[i];
         }
 
     strlwr(tabreduit);
 
     printf("%s",tabreduit);
 
     return;
}
 
Pourquoi ça marche pas, quelle merdouille ! Nos profs voudraient qu'on soit des pros en C alors que même eux n'y comprennent rien, c'est grave !

n°133250
Jar Jar
Intaigriste
Posté le 02-05-2002 à 09:33:28  profilanswer
 

antp a écrit a écrit :

LowerCase pour les AnsiString de Borland (c++) ou tolower dans la STL (C++) mais je crois qu'en C rien n'est prévu. De plus, pour le problème des accents et du remplacement des autres caractères... y a pas de solution toute faite je pense.


La fonction tolower existe en C ANSI, et dans les bonnes implémentations, elle gère les lettres accentuées en fonction de la localisation.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
mood
Publicité
Posté le 02-05-2002 à 09:33:28  profilanswer
 

n°133252
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-05-2002 à 09:35:04  profilanswer
 

Si tu faisais bien l'identation j'aurais vu tout de suite l'erreur:
 

Code :
  1. for (i=0;i<300;i++){
  2.     car=tab[i];
  3.     if ((car>='A')&&(car<='Z')){
  4.     car=car+('a'-'A');
  5.     tabreduit[i]=car;
  6.     }


 
tabreduit[i]=car ne doit pas être dans le if, donc :
 

Code :
  1. for (i=0;i<300;i++)
  2. {
  3.    car=tab[i];
  4.    if ((car>='A')&&(car<='Z'))
  5.    {
  6.       car=car+('a'-'A');
  7.    }
  8.    tabreduit[i]=car;
  9. }


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°133253
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-05-2002 à 09:37:22  profilanswer
 

Jar Jar a écrit a écrit :

La fonction tolower existe en C ANSI, et dans les bonnes implémentations, elle gère les lettres accentuées en fonction de la localisation.  




 
Oui mais même si la fonction existe étant donné qu'il doit quand même virer les autres caractères et remplacer les accents, autant qu'il le fasse dans une boucle :/
Dans l'aide de Borland ils parlent pas d'accents (je sais, tu as dit que c'était que dans les bonnes implémentations :D)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°133255
SMGFAN
Posté le 02-05-2002 à 09:39:30  profilanswer
 

Oki, c'est fait, mais il affiche pas le résultat, comment faire une pause après l'écriture du tableau, pour ne pas qu'il ferme la fenêtre ?
 
void reduction(){
 
char car;
int i;
 
     for (i=0;i<300;i++){
         car=tab[i];
         if ((car>='A';)&&(car<='Z';)){
            car=car+('a'-'A';);
            }
         tabreduit[i]=car;
         }
 
     printf("%s",tabreduit);
 
     return;
}

n°133257
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-05-2002 à 09:42:24  profilanswer
 

main(){
  lecture();
  reduction();
  fflush(stdin);
  getchar(); /* il faudra appuyer sur Enter pour quitter */
}


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°133261
SMGFAN
Posté le 02-05-2002 à 09:49:14  profilanswer
 

C'est bon ça marche, merci beaucoup !!! Il ne reste plus qu'à traiter le cas des accents !

n°133281
SMGFAN
Posté le 02-05-2002 à 10:23:06  profilanswer
 

Euh... c'est encore moi... car marche comment les switch case ?
 
Voilà où j'en suis :
 
void reduction(){
 
char car;
int i;
 
     for (i=0;i<300;i++){
 
         car=tab[i];
 
         switch (car){
            case 'é': car='e'; break;
            case 'É': car='e'; break;
            case 'è': car='e'; break;
            case 'È': car='e'; break;
            case 'ê': car='e'; break;
            case 'Ê': car='e'; break;
            case 'ë': car='e'; break;
            case 'Ë': car='e'; break;
 
            case 'î': car='i'; break;
            case 'Î': car='i'; break;
            case 'ï': car='i'; break;
            case 'Ï': car='i'; break;
            car='i'; break;
 
            case 'à': car='a'; break;
            case 'À': car='a'; break;
            case 'â': car='a'; break;
            case 'Â': car='a'; break;
            car='a'; break;
            }
 
         if ((car>='A';)&&(car<='Z';)){
            car=car+('a'-'A';);
            }
         tabreduit[i]=car;
         }
 
     printf("%s",tabreduit);
 
     return;
}

n°133285
Jar Jar
Intaigriste
Posté le 02-05-2002 à 10:35:01  profilanswer
 

antp a écrit a écrit :

Dans l'aide de Borland ils parlent pas d'accents (je sais, tu as dit que c'était que dans les bonnes implémentations :D)


Le problème avec les accents, c'est que pour les gérer dans toutes les langues, il faut utiliser les locales, et que les locales, c'est POSIX (et à moins que ça ait changé, Windows n'a aucun mécanisme de localisation).


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°133287
SMGFAN
Posté le 02-05-2002 à 10:41:56  profilanswer
 

Allez antp, tu vas bien nous trouver une solution ! :hap:

n°133293
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-05-2002 à 10:48:17  profilanswer
 

SMGFAN a écrit a écrit :

Allez antp, tu vas bien nous trouver une solution ! :hap:  




 
Je suis pas en permanence sur le forum :o
Je bosse, moi :p
 

Code :
  1. for (i=0;i<300;i++){
  2.          car=tab[i];
  3.          if ((car>='A')&&(car<='Z'))
  4.          {
  5.             car=car+('a'-'A');
  6.          }
  7.          else
  8.             switch (car)
  9.             {
  10.                case 'é':
  11.                case 'É':
  12.                case 'è':
  13.                case 'È':
  14.                case 'ê':
  15.                case 'Ê':
  16.                case 'ë':
  17.                case 'Ë': car='e'; break;
  18.                case 'í':
  19.                case 'Í':
  20.                case 'ì':
  21.                case 'Ì':
  22.                case 'î':
  23.                case 'Î':
  24.                case 'ï':
  25.                case 'Ï': car='i'; break;
  26.                case 'ä':
  27.                case 'Ä':
  28.                case 'ã':
  29.                case 'Ã':
  30.                case 'á':
  31.                case 'Á':
  32.                case 'à':
  33.                case 'À':
  34.                case 'â':
  35.                case 'Â': car='a'; break;
  36.                case 'ü':
  37.                case 'Ü':
  38.                case 'ú':
  39.                case 'Ú':
  40.                case 'ù':
  41.                case 'Ù':
  42.                case 'û':
  43.                case 'Û': car='u'; break;
  44.                case 'ö':
  45.                case 'Ö':
  46.                case 'ó':
  47.                case 'Ó':
  48.                case 'ò':
  49.                case 'Ò':
  50.                case 'ô':
  51.                case 'Ô': car='o'; break;
  52.                case 'ý':
  53.                case 'Ý':
  54.                case 'ÿ': car='y'; break;           
  55.                case 'ñ':
  56.                case 'Ñ': car='n'; break;
  57.                case 'ç':
  58.                case 'Ç': car='c'; break;
  59.             }
  60.          tabreduit[i]=car;
  61.          }


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°133297
gilou
Modérateur
Modzilla
Posté le 02-05-2002 à 11:02:24  profilanswer
 

Jar Jar a écrit a écrit :

Le problème avec les accents, c'est que pour les gérer dans toutes les langues, il faut utiliser les locales, et que les locales, c'est POSIX (et à moins que ça ait changé, Windows n'a aucun mécanisme de localisation).  




Ou passer par de l'unicode et utiliser ICU.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°133394
Jar Jar
Intaigriste
Posté le 02-05-2002 à 12:52:44  profilanswer
 

gilou a écrit a écrit :

Ou passer par de l'unicode et utiliser ICU.


Yop.
Cela dit, l'unicode en C, je n'ai pas essayé, mais ça n'a pas l'air formidable par rapport à ce qui se fait dans d'autres langages.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°133411
SMGFAN
Posté le 02-05-2002 à 13:45:08  profilanswer
 

antp a écrit a écrit :

 
 
Je suis pas en permanence sur le forum :o
Je bosse, moi :p
 

Code :
  1. for (i=0;i<300;i++){
  2.          car=tab[i];
  3.          if ((car>='A')&&(car<='Z'))
  4.          {
  5.             car=car+('a'-'A');
  6.          }
  7.          else
  8.             switch (car)
  9.             {
  10.                case 'é':
  11.                case 'É':
  12.                case 'è':
  13.                case 'È':
  14.                case 'ê':
  15.                case 'Ê':
  16.                case 'ë':
  17.                case 'Ë': car='e'; break;
  18.                case 'í':
  19.                case 'Í':
  20.                case 'ì':
  21.                case 'Ì':
  22.                case 'î':
  23.                case 'Î':
  24.                case 'ï':
  25.                case 'Ï': car='i'; break;
  26.                case 'ä':
  27.                case 'Ä':
  28.                case 'ã':
  29.                case 'Ã':
  30.                case 'á':
  31.                case 'Á':
  32.                case 'à':
  33.                case 'À':
  34.                case 'â':
  35.                case 'Â': car='a'; break;
  36.                case 'ü':
  37.                case 'Ü':
  38.                case 'ú':
  39.                case 'Ú':
  40.                case 'ù':
  41.                case 'Ù':
  42.                case 'û':
  43.                case 'Û': car='u'; break;
  44.                case 'ö':
  45.                case 'Ö':
  46.                case 'ó':
  47.                case 'Ó':
  48.                case 'ò':
  49.                case 'Ò':
  50.                case 'ô':
  51.                case 'Ô': car='o'; break;
  52.                case 'ý':
  53.                case 'Ý':
  54.                case 'ÿ': car='y'; break;           
  55.                case 'ñ':
  56.                case 'Ñ': car='n'; break;
  57.                case 'ç':
  58.                case 'Ç': car='c'; break;
  59.             }
  60.          tabreduit[i]=car;
  61.          }

 




 
bah y'a un tit soucis... les accents ne sont pas supprimés...

n°133429
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-05-2002 à 14:27:03  profilanswer
 

Pas besoin de quoter tout le post pour ça...
 
Bhen je sais pas pourquoi ça marche pas... Faut chercher.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°133433
SMGFAN
Posté le 02-05-2002 à 14:32:01  profilanswer
 

Bah je sais bien qu'il faut chercher, mais j'y connais pas grand chose :) C'est pour ça que j'essayer de trouver des infos sur le forum...

n°133533
Tetragramm​aton IHVH
dieu unique =&gt; pensée unique
Posté le 02-05-2002 à 16:33:37  profilanswer
 

antp a écrit a écrit :

 
 
Je suis pas en permanence sur le forum :o
Je bosse, moi :p
 

Code :
  1. ....

 




 
C'était interdit d'utiliser un tableau ?  :sarcastic:


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°133556
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-05-2002 à 16:50:31  profilanswer
 

Tableau de quoi ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°133563
Tetragramm​aton IHVH
dieu unique =&gt; pensée unique
Posté le 02-05-2002 à 16:55:31  profilanswer
 

antp a écrit a écrit :

Tableau de quoi ?  




 
Ben... un tableau de correspondance plutôt que d'executer un énorme copier-coller de switch/case tout vilain pour ne faire, en plus, qu'une simple affectation.
 
Avec un truc du style :
 
char correspondance[] = "éÉèÈêÊëËíÍìÌîÎïÏ";
char lowercase[] = "eeeeeeeeiiiiiiii";
 
etc... Ca présente l'avantage d'être facilement modifiable.

 

[jfdsdjhfuetppo]--Message édité par Tetragrammaton IHVH le 02-05-2002 à 17:16:33--[/jfdsdjhfuetppo]


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°133616
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-05-2002 à 17:48:09  profilanswer
 

Heu ouais :D
J'y avais pas pensé :o
Enfin j'ai pas tellement réfléchi non plus :ange:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°147062
viewsonic1​7ga
Posté le 29-05-2002 à 15:52:30  profilanswer
 

SMGFAN a écrit a écrit :

 
 
bah y'a un tit soucis... les accents ne sont pas supprimés...  




 
<Private Joke ON> Mais t'inquiete pas, tu l'auras pas ton LO22 !!! <Private Joke OFF>

mood
Publicité
Posté le   profilanswer
 


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

  [c] Transformer une chaîne de caractères en caractères minuscules

 

Sujets relatifs
[Java] j'ai besoin de transformer un Object en byte[][PHP] - Une fonction pour transformer un temps unix en date et heure.
[C] Comment remplir un tableau de caractères en boucle ?[C] comment on fé une fonction ki renvoie une chaine de caracteres ?
Comment convertir long int -> chaine de char ?[C] Comment remplir un tableau de caractères ?
Oooops ma chaine XML est interprétée comme du PHP...SQL en chaine au lieu e l'editeur de code sql
[PHP] Comment transformer... 
Plus de sujets relatifs à : [c] Transformer une chaîne de caractères en caractères minuscules


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