svp comment je peux transfomer un mot comporte les caracteres majuscules en minuscules dans un programme en langage C
per exemple: une PHrase==>UNE phRASE
Pour convertir en majuscule un caractère, tu as la fonction toupper().
Pour les minuscules, tu as tolower().
Cdlt,
Xelibrivstbs
Ceci est la meilleur reponse !!
ex1: Mettre en MAJUSCULE avec toupper() .
scanf( mot[i] ); mot[i]=toupper(mot[i]);
ex2: Mettre en minuscule avec tolower() .
scanf( mot[i] ); mot[i]=tolower(mot[i]);
fiddy
Contributeur
Merci. Mais ton exemple n'est pas bon.
Pour mettre en majuscule :
int i;
scanf("%s",mot);
for (i=0; i<strlen(mot); i++) {
mot[i]=toupper(mot[i]);
}
Pour mettre en minuscule, il suffit de remplacer toupper() par tolower().
Cdlt,
SCIENS Eµ
merci de m'avoir donner la reponse
François
Merci pour la réponse pour mon devoir de science de l'ingénieur, ainsi que de gros bisous on se refait le même apéro pour ce week-end ;) oublie pas le ricard mdr
Benj12324
Lol easy, même pas besoin d'utiliser de lib tellement c'est facile. Tient, pour le fun, je te l'ai même écrit en ternaire :
/*version "basique"*/
char *my_str_changer(char *str) { int i;
i = 0; if (str[0] == '\0') return (0); while (str[i] != '\0') { if (str[i] >= 'a' && str[i] <= 'z') str[i] = str[i] - 32; else if (str[i] >= 'A' && str[i] <= 'Z') str[i] = str[i] + 32; i = i + 1; } return (str); }
/*version "ternaire"*/
char *my_str_changert(char *str) { int i;
i = 0; if (str[0] == '\0') return (0); while (str[i] != '\0') { (str[i] >= 'a' && str[i] <= 'z') ? (str[i] = str[i] - 32) : ((str[i] >= 'A' && str[i] <= 'Z') ? (str[i] = str[i] + 32) : (i = i + 1)); i = i + 1; } return (str); }
pour le compiler tu fait un gcc et sinon, pour le main pour le lire, soit tu printf, soit tu créer un my_putchar et un my_putstr. :)
fiddy
Contributeur
Facile 5 ans après ;-).
Enfin, il y a quand même une faute :
(str[i] >= 'a' && str[i] <= 'z') ? (str[i] = str[i] - 32) :
((str[i] >= 'A' && str[i] <= 'Z') ? (str[i] = str[i] + 32) :
(i = i + 1)); le i=i+1; est en trop. Du coup, ton programme ne convertira pas la lettre suivant immédiatement un caractère non alphabétique...
Par ailleurs le 32, c'est pas terrible. Autant mettre '0' qui est quand même plus lisible.
Sinon, il y a toupper() et tolower(). Pas besoin d'inclure de bibliothèques supplémentaires.
Par contre, a ce moment la, comment enlever le i = i + 1 ? Il faut obligatoirement un else en ternaire non ?
fiddy
Contributeur
Ca m'étonnerait fort que ça marche dans le cas susmentionné.
Essaie par exemple : abc.def
Je pense que le d restera en minuscule vu qu'il y aura un double i=i+1.
Par contre, a ce moment la, comment enlever le i = i + 1 ? Il faut obligatoirement un else en ternaire non ? Eh oui. i=i*1 ;-).
Enfin, dans ce cas la version "opérateur ternaire" n'est pas appropriée...
johand@bata:~/src/CCM/C$ gcc -Wall -o swapcase swapcase.c
johand@bata:~/src/CCM/C$ ./swapcase "Salut les COpains"
Salut les COpains
sALUT LES coPAINS
b@chyr
hé tu n'a rien repondu
Hanan
J'ai de la difficulté d'utiliser correctement la fonction toupper et tolower
. Je n'ai pas pu avoir la synthaxe exact de ces fonctions.
fiddy
Contributeur
La doc te donne :
#include <ctype.h>
int toupper (int c);int tolower (int c); Donc toupper('a') te renverra 'A';
Hanan
Les caracteres va saisir par l'utilisateur, esk correcte d'ecrire:
printf("saisir un mot ");
gets(mot);
if(mot=='majuscule')
transfer=toupper('mot');
fiddy
Contributeur
Non.
Tu dois faire une boucle pour récupérer un à un les caractères.
Attention à ne pas utiliser gets, il vaut mieux utiliser fgets.
Cela te donnera à peu près :
char phrase[16];
int i;
printf("saisir un mot : ");
scanf("%15s",phrase);
for(i=...; i<...;i++) {
if(phrase[i] minuscule) phrase[i]=toupper(phrase[i]);
else if(phrase[i] majuscule) ...
}
puts(mot);
Hanan
regarde j'ai fais ça ,dis moi ou est le probleme:
#include <stdio.h>
#include <ctype.h>
void main(){
int toupper (char phrase);int tolower (char phrase);
char phrase[16];
int i,n;
printf("saisir un mot : ");
scanf("%15s",&phrase);
n=strlen(phrase);
for(i=0;i<n;i++) {
if(phrase[i]=='minuscule')
phrase[i]=toupper(phrase[i]);
else if(phrase[i]=='majuscule');
phrase[i]=tolower(phrase[i]);
}
for(i=0;i<n;i++)
puts(phrase);
}
fiddy
Contributeur
Le problème est, je pense, que tu confonds les caractères et les chaînes de caractère. Tu devrais peut-être commencer par relire un cours de C (site du zero par exemple).
scanf("%15s",&phrase); Non, juste phrase (pas de &).
if(phrase[i]=='minuscule') phrase[i] va te retourner un nombre compris entre 0 et 255. Tu peux donc pas le comparer avec 'minuscule'. De plus tu peux seulement mettre un seul caractère entre apostrophe sinon c'est une chaîne de caractère et ça se met entre guillemet.
Pour savoir si c'est en minuscule, tu as la fonction islower() (de même qu'il existe isupper).
islower('a') te retournera 1 (vraie).
void main(){ Ce n'est pas void mais int.
Et enfin main() renvoie 0 (return 0;) à la fin du programme pour signaler le bon déroulement de celui-ci.
for(i=0;i<n;i++) puts(phrase); Non c'est puts(phrase); tout seul. Tu affiches directement la chaîne de caractère.