IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Conversion d'une chaine minuscule en majuscule


Sujet :

C++

  1. #1
    Membre habitué Avatar de CLeBeR
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Points : 188
    Points
    188
    Par défaut Conversion d'une chaine minuscule en majuscule
    Bonjour,
    Je voudrais tester si ma chaine contient une minuscule et la transformer en majuscule dans ce cas. En revanche, si ma chaine est en majuscule, je voudrais la passer en minuscule. J'ai donc fait le code pour tester si le caractère est un minuscule ou majuscule, selon le cas, je le transforme, pour cela j'ai parcouru la chaine avec une boucle for jusqu'à la taille de la chaine.
    Le problème c'est que j'obtiens l'erreur :
    error C2446: '<'*: pas de conversion de 'unsigned int (__thiscall std::basic_string<char,std::char_traits<char>,std::allocator<char>>::* )(void) throw() const' en 'unsigned int'
    sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (unsigned i = 0; i < Chaine.size; i++)
    dans la fonction toupper.
    Je n'arrive pas à comprendre, voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    namespace
    {
    	bool IsUpper(char caractere)
    	{
    		return (caractere >= 'A' && caractere <= 'Z');
    	}// Test si le caractère est en majuscule
     
    	bool IsLower(char caractere)
    	{
    		return (caractere >= 'a' && caractere <= 'z');
    	}// Test si le caractère est en minuscule
     
     
    	string ToUpper(string Chaine)
    	{
    		for (unsigned i = 0; i < Chaine.size; i++)
    		{
    			if (IsLower(Chaine[i])) Chaine[i] = toupper(Chaine[i]);
    		}
    		return Chaine;
    	}// Transforme la chaine en majuscule (elle parcours toute la chaine et test le caractère d'indice i)
     
    	string ToLower(string Chaine)
    	{
    		for (unsigned i = 0; i < Chaine.size; i++)
    		{
    			if (IsUpper(Chaine[i])) Chaine[i] = toupper(Chaine[i]);
    		}
    		return Chaine;
    	}// Transforme la chaine en minuscule (elle parcours toute la chaine et test le caractère d'indice i)
    } // Namespace
    Merci de votre aide !
    Pensez à voter pour une réponse qui vous aide ou pour une personne insolente !
    Si votre sujet est résolu, cliquez sur le bouton !

  2. #2
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(size_t i = 0; i < chaine.size(); i++)

  3. #3
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    NB:
    - une réponse est donnée dans la FAQ
    - la réponse de la FAQ et la tienne ne vont gérer que les alphabets classiques : français, anglais, mais pas d'autres comme l'allemand. Pour ces alphabets, cela devient beaucoup plus compliqué. D'où ICU, boost.locale et d'autres bilbiothèques

    Sinon, pour revenir à ton exercice, les tests isUpper et isLower n'apportent rien et sont redondants avec ce que tolower et toupper font déjà. Il est bien de ce poser la question du contrat de ces fonctions, mais leur contrat est : de prendre n'importe quel caractère et de la convertir s'il est convertissable.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Membre habitué Avatar de CLeBeR
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    Bonjour,
    effectivement cela fonctionne avec size_t, c'est apparemment aussi un réel, cependant je n'arrive pas à comprendre pourquoi ça ne fonctionnait pas avec unsigned. Peut on m'expliquer ?
    Merci en tout cas !
    Pensez à voter pour une réponse qui vous aide ou pour une personne insolente !
    Si votre sujet est résolu, cliquez sur le bouton !

  5. #5
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Bonsoir,

    Ce n'est pas grâce au size_t (qui est visiblement un unsigned sur ton système, au mieux il y aurait un warning) mais aux parenthèses dans chaine.size(). On ne compare pas un nombre avec une fonction mais avec le retour de la fonction.

  6. #6
    Membre habitué Avatar de CLeBeR
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    Effectivement ça marche aussi avec le unsigned si je mets les parenthèses ! Wow ça va me changer de VB, j'ai passé plusieurs heures à chercher ahah ! J'ai eu le même problème pour .empty(), je m'en rappellerai maintenant
    Merci en tout cas !
    Pensez à voter pour une réponse qui vous aide ou pour une personne insolente !
    Si votre sujet est résolu, cliquez sur le bouton !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tester la valeur d'une chaine Minuscule, Majuscule ...
    Par Xsat1 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/02/2010, 17h16
  2. Conversion d'une chaine en majuscule dynamiquement
    Par berti dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/03/2008, 12h32
  3. conversion d'une chaine de caractère en int
    Par greg13 dans le forum C++
    Réponses: 3
    Dernier message: 25/08/2005, 16h18
  4. [string->HTML] Conversion d'une chaine en HTML
    Par salome dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 24/07/2005, 16h27
  5. Conversion d'une chaine de char en numerique
    Par simone.51 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 25/03/2004, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo