Transformer les majuscule en miniscule en C [Fermé]

Signaler
-
 François -
Bonjour,



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

************
merci d'avance
A voir également:

5 réponses

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 768
Pour convertir en majuscule un caractère, tu as la fonction toupper().
Pour les minuscules, tu as tolower().

Cdlt,
16
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci


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]);
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 768
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,

merci de m'avoir donner la reponse
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
Messages postés
24
Date d'inscription
mercredi 2 mars 2011
Statut
Membre
Dernière intervention
6 mars 2011
5
Bonjour

https://en.wikipedia.org/wiki/ASCII

Regarde la table ASCII binaire

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'

}
j'ai pas compris bien tu peux m'expliquer plus d'une autre maniere ,jarrive pas à ecrire le programme :s
Messages postés
24
Date d'inscription
mercredi 2 mars 2011
Statut
Membre
Dernière intervention
6 mars 2011
5
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'
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);
}
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.
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);
}
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 768
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.

Cordialement,
j'essayé de resoudre les fautes vois mnt :
#include <stdio.h>
#include <ctype.h>
#include <cctype>
int islower (int c);{
int x;
x =islower(c);
return x;}

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(islower(phrase)==0)
phrase[i]=toupper(phrase[i]);
else
phrase[i]=tolower(phrase[i]);
}
for(i=0;i<n;i++)
puts(phrase);
}
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 768
T'as presque rien corrigé...
void main()...
for puts...
Pour savoir si c'est en minuscule c'est par rapport à 1 et non 0 qu'il faut comparer.
Et pourquoi t'as mis :

int islower (int c);{
int x;
x =islower(c);
return x;}

Faut pas le mettre, islower() est une fonction standard.
int main(void){
char str[100];
char i;
printf("Entrez la chaine a convertir :");
gets(str);

for(i=0;str[i];i++){
if(str[i]>= 'A' && str[i] <= 'Z')
str[i] = str[i] - 'A' + 'a' ;
else if (str[i] >= 'a' && str[i] <= 'z')
str[i]=str[i]- 'a' +'A';
}
printf("chaine convertie : %s \n",str);

system("pause");
}
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
947
Ce code répondra une fois pour toutes au sujet:
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>


int main(int argc, char* argv[])
{
  char *pc;
  if(argc < 2)
    {
      return EXIT_FAILURE;
    }

  puts(argv[1]);
  for (pc = argv[1] ; 0 != *pc; pc++)
    {
      if( islower(*pc) )
	{
	  *pc = toupper(*pc) ;
	  continue;
	}
      if( isupper(*pc) )
	{
	  *pc = tolower(*pc) ;
	}
    }
  puts(argv[1]);
  return EXIT_SUCCESS;
}


Sa compilation et son exécution:
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



hé tu n'a rien repondu
Messages postés
246
Date d'inscription
jeudi 22 décembre 2011
Statut
Membre
Dernière intervention
3 novembre 2016
46
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. :)
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 768
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.
Messages postés
246
Date d'inscription
jeudi 22 décembre 2011
Statut
Membre
Dernière intervention
3 novembre 2016
46 >
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016

Ben, perso, j'ai testé et ca marchais. :/

Par contre, a ce moment la, comment enlever le i = i + 1 ? Il faut obligatoirement un else en ternaire non ?
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 768
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...