Substitution string string dans une phrase [debutant]

Résolu
jeanpierre691 Messages postés 19 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 4 novembre 2009 - 3 nov. 2009 à 15:53
jeanpierre691 Messages postés 19 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 4 novembre 2009 - 4 nov. 2009 à 05:07
Salut

Bon voilà, je fais actuellement un projet très simple sur C#, je l'ai commencé il n'y a pas longtemps, et pourtant, je rencontre quelques difficultés.

Voici ce que j'ai fait jusqu'à présent.
        public static void SubstitutionStringParString () {
            string message = "";
            message += "\nSubstitution d'un string x par un string y dans un string p.\n";
            message += "Donner le string p : ";
            Console.Write (message);
            string p = Console.ReadLine();
            Console.Write ("Donner le string x à substituer : ");
            string x = Console.ReadLine();
            Console.Write ("Donner le string y <sa substitution> : ");
            string y = Console.ReadLine();
            Console.WriteLine();
            Console.WriteLine ("Résultats:\n==========");
            Console.WriteLine ("Avant la substitution de x par y dans p on a:");
            Console.WriteLine ("=============================================");
            Console.WriteLine ("x = "{0}"", x);
            Console.WriteLine ("y = "{0}"", y);
            Console.WriteLine ("p = "{0}"", p);
            Console.WriteLine ();
            Console.WriteLine ("Après la substitution de x par y dans p on a:");
            Console.WriteLine ("=============================================");
            string z = p;
            Console.WriteLine ("p = "{0}"", z);
        } // Fin méthode SubstitutionStringParString ()



Rien de mieux que la joie ressentit lors d'une simple et bonne programmation!!

13 réponses

MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
3 nov. 2009 à 18:54
Pour la deuxième c'est normal, cela implique de coder l'algo de boyer moore dans la méthode AllOccurrences...

Pour la 1ère c'est une idée à l'arrache, l'implémentation d'une méthode simple serait de tester une par une les lettres contenues dans P avec celles de X.

Dès que tu trouve dans P la première lettre de X tu testes la suite de P avec celle de X.
Des que tu as vu le motif de X dans P tu sauvegarde la position de X dans P.
Puis grâce à ces positions tu es à même de récupérer ce qui t'interesse de P en y intégrant Y.

Voici l'algo :

static private string Substitute(string phrase, string motifATrouve, string motifDeRemplacement)
        {
            // Contiendra le résultat
            StringBuilder result = new StringBuilder();

            // Liste toutes les positions du motif à trouver dans la phrase
            List positions = new List();

            // Indice de boucle de motifATrouve
            int j = 0;

            // Nouvelle position du pointeur dans phrase
            int newPos = 0;

            if (!phrase.Contains(motifATrouve))
                return phrase;

            for (int i = 0; i < phrase.Length; ++i)
            {
                if (phrase[i] == motifATrouve[0])
                {
                    // Ici on va tester chaque caractère du motif  dans la phrase
                    for (j = 1; j < motifATrouve.Length; ++j)
                    {
                        // Si une lettre est fausse, alors on quitte la boucle
                        if (phrase[i + j] != motifATrouve[j])
                            break;
                    }

                    // Ici on teste si j vaut la longueur du motif à trouver cela nous permet de savoir si le mot est trouvé
                    // si c'est le cas alors on ajoute l'index de début du motif
                    if (j == motifATrouve.Length)
                        positions.Add(i);

                    i += motifATrouve.Length - 1;
                }
            }

            // Maintenant on a toutes nos positions du motif dans la phrase
            // donc on va remplir notre stringbuilder du mot en remplacant le motif par le motif de remplacemen
            for (int i = 0; i < positions.Count; ++i)
            {
                // Prend la position actuelle du motif
                int pos = positions[i];

                // Ajoute toutes les lettres avant celles du motif
                for(j=newPos;j<pos;++j)
                    result.Append(phrase[j]);

                // Ajoute y
                result.Append(motifDeRemplacement);

                // Nouvelle position du curseur
                newPos = positions[i] + motifATrouve.Length;
            }

            // Copie le reste de la phrase si necessaire
            // Pour cela, on prend le dernière indice du motif dans la phrase et on lui ajoute la taille du motif sinon on ne récupère la fin de phrase
            for (int i = positions[positions.Count - 1] + motifATrouve.Length; i < phrase.Length; ++i)
                result.Append(phrase[i]);

            return result.ToString();
        }


Après si tu veux avoir plus simple, garde la méthode Replace... (je ne pense pas qu'on puisse faire plus simple que la méthode présentée au dessus)
1
Rejoignez-nous