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 :

String.Copy & String.Substring


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut String.Copy & String.Substring
    Bonjour a tous, je suis débutant en C# et je cherche à faire je vous présente ma fonction :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    public void creationListe()
            {
                FileStream file = new FileStream("liste.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
                StreamReader chaine = new StreamReader(file, Encoding.UTF8);
                String mot, canoniser;
                List<string> mots;
    
                while (chaine.ReadLine() != null)
                {
                    /* Récupération de chaque mot dans la liste puis canonisation du 
                        mot. Insertion dans le dictionnaire, la clé sera le mot
                        canonisé. La donnée sera une liste de tous les anagrammes. */
                    
                    canoniser = "";
                    mot = chaine.ReadLine();
                    if (mot.Length != 0)
                    {
                        string tmp, tmp2;
                        for (int pos1 = 0; pos1 < mot.Length; pos1++)
                        {
                            tmp = mot.Substring(pos1, 1);
                            if (canoniser.Length == 0)
                            {
                                canoniser = String.Copy(tmp);
                            }
                            else
                            {
                                for (int pos2 = 1; pos2 <= canoniser.Length; pos2++)
                                {
                                    tmp2 = canoniser.Substring(pos2, 1);
                                    if (String.Compare(tmp, tmp2) < 0)
                                    { canoniser.Insert(pos2, tmp); }
                                }
                            }
                        } // Fin du for
    
                        if (liste.Count() == 0)
                        {
                            mots = new List<string>();
                            mots.Add(mot);
                            liste.Add (canoniser,mots);
                        }
                        else
                        {
                            foreach (KeyValuePair<string, List<string>> element in liste)
                            {
                                if (liste.ContainsKey(canoniser))
                                {
                                    mots = element.Value;
                                    mots.Add(mot);
                                }
                                else
                                {
                                    mots = new List<string>();
                                    mots.Add(mot);
                                    liste.Add(canoniser, mots);
                                }
                            } // Fin du foreach
                        } // Fin du Liste.Count()
                    } //Fin du if   
                } // Fin du while
                chaine.Close();
                file.Close();
            } // Fin fonction
    L'exception ArgumentOutOfRangeException à la ligne rouge !! Pour avoir controler la chaine canoniser elle est totalement vide !! J'ai un soucis dans l'affectation de tmp dans canoniser. Un petit soutien dans la création et l'affectation de tmp dans canoniser pourrait m'aider. Mais toutes vos suggestions sur la fonction sont également les bienvenus !!

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Il y a un problème dans ton algorithme je pense.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmp2 = canoniser.Substring(pos2, 1);
    Tu cherche à récupérer le caractère à la position pos2 dans la chaîne, mais pos2 démarre à 1. Hors, à ce stade, ta chaîne est censée contenir un caractère au minimum. Ton index de départ est donc trop grand à ce moment.

    Au passage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    canoniser = String.Copy(tmp);
    Peut être simplifié ainsi
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maChaine.Substring(pos2, 1);
    En
    Puisque l'on veut prendre un caractère (longueur 1 pour la découpe). On ajoute un ToString éventuellement si on veut manipuler l'ensemble comme une chaîne.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    le soucis c'est que :

    me provoque un plantage au lancement du programme et je revois l'exception : System.InvalidOperationException.

    La première chose qui m'est venu à l'esprit c'est bien entendu ce code là. En fait canoniser demeure toujours vide il faut qu'à cette instruction j'initialise ma chaine et je ne comprends pas pour je ne peux pas le faire.

Discussions similaires

  1. Copie de string
    Par Benco1664 dans le forum Langage
    Réponses: 7
    Dernier message: 02/09/2014, 10h40
  2. Copie de String Avec Accents ou Apostrophe
    Par progamer54 dans le forum Langage
    Réponses: 3
    Dernier message: 30/10/2007, 10h40
  3. [Debutant] string.copy désapprouvé
    Par alainpeniche dans le forum Débuter
    Réponses: 2
    Dernier message: 18/09/2007, 09h31
  4. copie de string donne une chaine vide
    Par zmatz dans le forum SL & STL
    Réponses: 5
    Dernier message: 15/10/2005, 15h31
  5. Problème de copie de string dans string
    Par kazarn dans le forum SL & STL
    Réponses: 17
    Dernier message: 15/03/2005, 18h35

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