Partage
  • Partager sur Facebook
  • Partager sur Twitter

comparaison de deux strings

    6 novembre 2019 à 16:45:53

    Bonjour,

    Est ce que c'est possible de comparer caractère par caractère deux string de taille différente ?

    Merci de vos retours

    • Partager sur Facebook
    • Partager sur Twitter
      6 novembre 2019 à 17:09:30

      Oui, et ?

      Pourquoi les méthodes type "StartsWith" et consort ne suffisent pas ?

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        6 novembre 2019 à 17:22:09

        static void Main(string[] args)
                {
                    String sFirst   = "One String";
                    String sLonger  = "One String whose size's different";
                    String sOrdinal = "One Strinf"; //f before g
        
                    String sSame = "Same String";
                    String sSameBis = "Same String";
        
                    int iRes = String.Compare(sFirst, sLonger);         // -1 --> sLonger plus long
                    int iResLength = String.Compare(sLonger, sFirst);   //  1 --> sFirst plus court
        
                    int iResOrdinal = String.Compare(sFirst, sOrdinal); //  1 --> sOrdinal précède sFirst
        
                    int iResSame = String.Compare(sSame, sSameBis);     //  0 --> Même String
        
                    Console.WriteLine(iRes); 
                    Console.WriteLine(iResLength); 
        
                    Console.WriteLine(iResOrdinal); 
        
                    Console.WriteLine(iResSame);
        
                    Console.ReadKey();
                }
        • Partager sur Facebook
        • Partager sur Twitter
          6 novembre 2019 à 19:10:43

          Sur l'exemple suivant :

          chaine 1 : TERH125

          chaine 2 : TER-H/125PML

          Extraire les différences entre chaine 2 et chaine 1.

          Je connais les méthodes "StartsWith", "Contains" et Compare mais ce que je veux c'est la comparaison caractère par caractère et isoler les différences (-,/,PML)

          • Partager sur Facebook
          • Partager sur Twitter
            7 novembre 2019 à 15:26:44

            Non, je ne crois pas que cela existe. Je trouve le process un peu illogique.

            Admettons qu'une fonction CompareIt() de ce genre existe :

            CompareIt(chaine1, chaine2);
            • Un output plus probable serait : -H/125PML
            • CompareIt(chaine2, chaine1) risquerai de throw un IndexOutOfRangeException

            Je vous encourage à bidouiller ça vous même... ou à piquer le bidouillage d'un autre sur internet. Les solutions pullulent sur StackOverflow.

            • Partager sur Facebook
            • Partager sur Twitter
              7 novembre 2019 à 15:45:07

              chaine2 = chaine2.Substring(0, chaine1.Length);
              
              if (chaine2.Equals(chaine1))
              {
              	valuediff = chaine2.Substring(chaine1.Length, diffTaille);
              }
              else
              {
              	for (int i = 0; i < chaine2.Length; i++)
              	{
              		if (!chaine1[i].Equals(chaine2[i]))
              		{
              			valuediff = chaine2.Substring(i, 1);
              			
              
              		}
              	} 
              }
              Je pensais procéder comme ça . Vous en pensez quoi?
              • Partager sur Facebook
              • Partager sur Twitter
                7 novembre 2019 à 16:43:35

                J'en pense que vous devriez l'essayer vous même avant de me demander mon avis.

                Vous vous rendrez compte d'un certain nombre de problèmes dans votre proposition de solution.

                • Partager sur Facebook
                • Partager sur Twitter
                  8 novembre 2019 à 14:19:14

                  Plutôt que de faire un truc dans un coin tout moisi, pensez à faire des fonctions d'extensions, même si vos spécifications sont toutes pétées.

                  En voici une qui correspond à vos "spécification" :

                  public static IEnumerable<Tuple<uint, string, string>> CompareChelou(this IEnumerable<char> seqA, IEnumerable<char> seqB)
                  {
                      bool hasValueA, hasValueB;
                      uint indexer = 0;
                  
                      using (var iteratorA = seqA.GetEnumerator())
                      using (var iteratorB = seqB.GetEnumerator())
                      {
                          do
                          {
                              hasValueA = iteratorA.MoveNext();
                              indexer++;
                  
                              hasValueB = iteratorB.MoveNext();
                  
                              if (hasValueA | hasValueB)
                              {
                                  char a = hasValueA ? iteratorA.Current : default(char);
                                  char b = hasValueB ? iteratorB.Current : default(char);
                  
                                  if (a != b)
                                  {
                  
                                      var diff = new StringBuilder();
                  
                                      if (b != default(char))
                                      {
                                          while (hasValueB && (a != b))
                                          {
                                              diff.Append(b);
                                              hasValueB = iteratorB.MoveNext();
                                              b = hasValueB ? iteratorB.Current : default(char);
                                          }
                                     }
                  
                                     yield return new Tuple<uint, string, string>(indexer - 1, a.ToString(), diff.ToString());
                                  }
                              }
                  
                          } while (hasValueA || hasValueB);
                      }
                  }

                  Cela donne un tuple donnant l'index de la différence, le caractère recherché dans la 1ère chaine et la liste des caractères qui sont différents dans la 2ème chaine.

                  Pour avoir la liste de ces tuples :

                  s1.ToCharArray().CompareChelou(s2.ToCharArray()).ToList();




                  • Partager sur Facebook
                  • Partager sur Twitter
                  Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                  comparaison de deux strings

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown