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 :

Convertir tous caractere miniscule en Majescule et verci versa


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Avril 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2005
    Messages : 120
    Par défaut Convertir tous caractere miniscule en Majescule et verci versa
    Bonjour ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    static string ConvertMajtoMin(string input)
            {
                char[] vide = new char[] { ' ' };
                string[] tab = input.Split();
                string newstring = "";
                for (int i = 0; i <= tab.Length; i++)
     
                    newstring = newstring + " ";
                    newstring = tab[0].ToString().ToUpper() + tab.Substring(i).ToLower(); 
     
                    return newstring;
            }
    dans mon code il convert chaue premiere lettre en Majescule et la suite du mots en miniscule
    le probleme se pose dans le substring.
    j'arrive pas a comprendre pourquoi .

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    De quelle chaîne tu pars et quelle chaîne veux-tu obtenir ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Avril 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2005
    Messages : 120
    Par défaut
    Si le caractere est miniscule sa devient Majescule et majescule en miniscule.

  4. #4
    Membre chevronné Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Par défaut
    Bonjour,

    Les méthodes char.IsUpper() et char.IsLower() devraient te mettre sur la voie

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Comme le mentionne WaterTwelve21, les méthodes static de Char IsLower et IsUpper devrait t'aider.

    Et du coup, tu auras également besoin des méthodes ToUpper et ToLower disponible sur des chaîne.

    Je rajouterai quelques conseils :

    1. Renommer la méthode en quelque chose comme InverserCasse ou ReverseCase pour que le nom corresponde à ce que ça fait.
    Choisir entre l'anglais et le français mais pas un mélange des deux.

    2. Transformer ta boucle for en boucle foreach.
    Cela sera plus simple à écrire et à comprendre tout en ayant l'avantage de travailler directement avec un Char.
    Cela imposera de refaire un ToString() pour revenir vers la chaine.

    3. Mettre le return en dehors de la boucle.
    Sinon, tu ne traiteras que le premier caractère

    4. Ne pas concaténer newstring mais utiliser un StringBuilder.

  6. #6
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Une string étant un IEnumerable<char> on peut utiliser LinQ pour faire la transformation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    internal static class Extensions
        {
            internal static string ReverseCase(this string source) =>
                 source
                 .Select(c =>
                    char.IsUpper(c) ? char.ToLower(c) :
                    char.IsLower(c) ? char.ToUpper(c) :
                    c)
                 .Aggregate(new StringBuilder(), (sb, c) => sb.Append(c))
                 .ToString();
        }

  7. #7
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Je voyais plus un truc comme ceci mais ça revient au même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    internal static class Extensions
    {
        internal static string ReverseCase(this string source)
        {
            var builder = new StringBuilder();
            foreach (var character in source)
            {
                if (Char.IsLower(character)) builder.Append(character.ToString().ToUpper());
                else builder.Append(character.ToString().ToLower());
            }
     
            return builder.ToString();
        }
    }

    Par contre, on peut encore simplifier ta proposition comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    internal static class Extensions
    {
        internal static string ReverseCase(this string source) =>
                source
                .Select(c =>
                char.IsUpper(c) ? char.ToLower(c) : char.ToUpper(c))
                .Aggregate(new StringBuilder(), (sb, c) => sb.Append(c))
                .ToString();
    }

  8. #8
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Citation Envoyé par popo Voir le message
    Par contre, on peut encore simplifier ta proposition comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    internal static class Extensions
    {
        internal static string ReverseCase(this string source) =>
                source
                .Select(c =>
                char.IsUpper(c) ? char.ToLower(c) : char.ToUpper(c))
                .Aggregate(new StringBuilder(), (sb, c) => sb.Append(c))
                .ToString();
    }
    En pratique je pense que c'est effectivement équivalent ; par contre sur le principe il n'y a environ que 2000 caractères qui sont majuscules ou minuscule, la plupart ne sont ni l'un ni l'autre.

Discussions similaires

  1. convertir un caractere en entier
    Par bilou_2007 dans le forum C
    Réponses: 5
    Dernier message: 25/02/2007, 14h56
  2. convertir chaine caractere en une date
    Par semaj_james dans le forum C
    Réponses: 2
    Dernier message: 22/12/2006, 21h17
  3. Réponses: 5
    Dernier message: 12/12/2006, 10h19
  4. [Fortran 77] Convertir un caractère en réel
    Par ERICKO dans le forum Fortran
    Réponses: 4
    Dernier message: 23/06/2006, 15h55
  5. Convertir un caractere d'un tableau en int
    Par Battosaiii dans le forum C
    Réponses: 8
    Dernier message: 21/03/2006, 16h28

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