[C++] Transformer une minuscule en majuscule

Transformer une minuscule en majuscule [C++] - C++ - Programmation

Marsh Posté le 24-10-2019 à 22:25:54    

Salut !
 
J'ai commencé la programmation en C++ il y pas très longtemps, sur Visual Studio 2019, et j'en suis au type char, mais je rencontre un petit problème..
Je souhaite transformer une minuscule en majuscule ( ou l'inverse ) à l'aide de la table ASCII, mais je n'arrive pas au résultat voulu, je ne trouve pas mon erreur ( ou la solution )..
 
http://image.noelshack.com/fichiers/2019/43/4/1571948569-cpp1.png
http://image.noelshack.com/fichiers/2019/43/4/1571948569-cpp2.png
 
Sur les photos ci-dessus, j'aimerai que mon " t " se transforme en " T " mais je ne sais pas quoi rajouter pour produire ce résultat..
Est-ce que quelqu'un pourrait me dépanner pour ce petit problème de rien du tout ? :S
 
Merci ^^
 
 

Reply

Marsh Posté le 24-10-2019 à 22:25:54   

Reply

Marsh Posté le 24-10-2019 à 23:36:37    

Pour convertir ASCII en char, faire static_cast<char>(ASCII)
 
Un petit exemple :
 

Code :
  1. #include <iostream>
  2. int main() {
  3.   char c;
  4.   std::cout << "Entrez un caractere ascii : " << std::flush;
  5.   std::cin >> std::noskipws >> c;
  6.  
  7.   int ascii = static_cast<int>(c);
  8.   if (ascii > 127 or ascii < 0) {
  9.     std::cout << "Le caractere entre n'est pas un caractère ascii!" << std::endl;
  10.   }
  11.   else if ((ascii >= 0 and ascii <= 8) or (ascii >= 10 and ascii <= 31)) {
  12.     std::cout << "Le caractere entre n'est imprimable!" << std::endl;
  13.   }
  14.   else if (ascii >= 65 and ascii <= 90) {
  15.     std::cout << "Le caractere " << c << " en majuscule : " << c << std::endl;
  16.   }
  17.   else if (ascii >= 97 and ascii <= 122) {
  18.     std::cout << "Le caractere " << c << " en majuscule : " << static_cast<char>(ascii-32) << std::endl;
  19.   }
  20.   else {
  21.     std::cout << "Le caractere " << c << " n'a pas de majuscule" << std::endl;
  22.   }
  23.  
  24.   return 0;
  25. }


 
Note: std::cin >> std::noskipws >> c;  c'est pour que les caractères comme le blanc, tab, etc soient acceptés comme une valeur possible, sinon cin les ignorera.
Note 2: la locale de ta console aura une influence.
 
A+,


Message édité par gilou le 25-10-2019 à 14:54:58

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 27-10-2019 à 09:26:23    

Fondamentalement un entier (int) c'est fait pour contenir une valeur entière, donc quand tu passes ASCII à cout il tente de te l'afficher comme... Un entier. Il ne peut pas deviner que tu tentes d'y mettre un char et que c'est comme ça que tu voudrais l'afficher.

 

Sachant en plus de ça qu'un int occupe 8 (ou 4) octets, pourquoi passer par un int ?
Tu peux faire tes opérations mathématiques d'un char à un autre.

 

edit : par rapport au post de gilou, c'est une très bonne idée de vérifier que la transposition "minuscule->majuscule" est possible avant d'y appliquer le -32 mais ça n'est pas le but premier de l'exo j'imagine. Et je ne sais pas si static_cast<T> est la réponse attendue.


Message édité par TotalRecall le 27-10-2019 à 09:30:52

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Sujets relatifs:

Leave a Replay

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