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
Les majuscules vont de 65 a 90
Les minuscules vont de 97 a 122
while (parcourt ma chaine)
{
if(c'est une minuscule)
lecaractere -= 'a' - 'A';
else
lecaractere += 'a' - 'A'
}
Hanan
j'ai pas compris bien tu peux m'expliquer plus d'une autre maniere ,jarrive pas à ecrire le programme :s
titigrominet
En gros, tu as ta phrase "toTO"
char *str;
c'est une chaine de caractère
tu va parcourir caractère par caractère ta chaine
Tu va commencer par le 't'
Tu peux utiliser en C le code ASCII d'un caractère
le code ASCII du 't' est 116
116 est entre 97 et 122 c'est bien une minuscule
pour le passer en majuscule, tu va soustraire au code ASCII de ton caractere la différence entre une lettre majuscule et une lettre minuscule.
'a' = 97
'A' = 65
97 - 65 = 32
Il a 32 de différence entre une majuscule et une minuscule dans la table ASCII
tu va donc faire
116 - 32 = 84
si tu regarde dans la table ASCII 84 = 'T'
PAreil pour le 'o' = 111
'o' - 32 = 79 = 'O'
Et pour passer de majuscule a minuscule tu fais une addition
'T' = 84
'T' + 32 = 116 = 't'
'O' = 79
'O' + 32 = 111 = 'o'
Hanan
regarde ce q j'ai fais esk correcte ou no:
#include <stdio.h>
void main(){
char *str;
char mot[100];
int i;
str=&char;
printf("saisir un mot\n");
gets(mot);
if (mot<=90 || mot>=65)
mot=mot-32;
for(i=97;i<=200;i++)
if (mot<=97 || mot>=122)
mot=mot+32;
printf("%s",mot);
}
malo
Faux !!
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.
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
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...