Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème distance de livenstein

    21 novembre 2017 à 22:27:32

    int distanceLivenstein(string &S1 , string &S2)
    {
        int i , j , couts=0;
        int m=S1.size(), n=S2.size();
        int d[m+1][n+1];
        for(i=0;i<=m;i++) d[i][0]=i;
        for(j=0;i<=n;j++) d[0][j]=j;
    
        for(i=1;i<=m;i++){
           for(j=1;j<=n;j++){
            if(S1[i-1]==S2[j-1]) couts=0;
            else couts=1;
    
            d[i][j]=minimum(d[i-1][j]+1,d[i][j-1]+1,d[i-1][j-1]+couts);//fonction déja défini
    
           }
        }
        return d[m][n];
    }

    Le code ci dessus de l'algorithme de livenstein pour comparer deux chaines de caractères :

    Si S1="abcd" et S2="abc"

    l'algorithme marche bien en donnant : 1 comme résultat

    or qu'on S1 est plus petit que S2 le programme s'éxecute ms en plentant le systeme il ne donne rien

    exemple S1="abc" et S2="abcd"

    Résultat : le programme a cessé de fonctionner

    Je ne sais pas en quel ligne j'ai fait l'erreur dans mon code

    et merci

    • Partager sur Facebook
    • Partager sur Twitter
      22 novembre 2017 à 0:26:02

      Code pas valide, tu n'as pas le droit d'utiliser des variables dans un tableau. Si ton compilateur l'accepte, c'est que tu as pas configurer ton compilateur pour verifier que ton code C++ est valide. Donc le compilateur laisse passer des erreurs.

      Voila ce que clang dit sur ton code :

      main.cpp:7:29: warning: control reaches end of non-void function [-Wreturn-type]
      int minimum(int, int, int) {}
                                  ^
      main.cpp:13:15: warning: variable length arrays are a C99 feature [-Wvla-extension]
          int d[m+1][n+1];
                    ^
      main.cpp:13:15: warning: variable length array used [-Wvla]
      main.cpp:13:10: warning: variable length arrays are a C99 feature [-Wvla-extension]
          int d[m+1][n+1];
               ^
      main.cpp:13:10: warning: variable length array used [-Wvla]
      main.cpp:15:13: warning: variables 'i' and 'n' used in loop condition not modified in loop body [-Wfor-loop-analysis]
          for(j=0;i<=n;j++) d[0][j]=j;
                  ^  ~
      main.cpp:19:16: warning: implicit conversion changes signedness: 'int' to 'size_type' (aka 'unsigned long') [-Wsign-conversion]
              if(S1[i-1]==S2[j-1]) couts=0;
                 ~~ ~^~
      main.cpp:19:25: warning: implicit conversion changes signedness: 'int' to 'size_type' (aka 'unsigned long') [-Wsign-conversion]
              if(S1[i-1]==S2[j-1]) couts=0;
                          ~~ ~^~
      main.cpp:12:11: warning: implicit conversion loses integer precision: 'size_type' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32]
          int m=S1.size(), n=S2.size();
              ~ ^~~~~~~~~
      main.cpp:12:24: warning: implicit conversion loses integer precision: 'size_type' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32]
          int m=S1.size(), n=S2.size();
                           ~ ^~~~~~~~~
      10 warnings generated.

      Tu as une erreur dans une de te boucle for.

      HS :

      - pourquoi des references non constantes ?

      - toujours declarer les variables quand on en a besoin, pas a l'avance. (En plus, ici, ca t'aurait evite l'erreur)

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        22 novembre 2017 à 9:14:48

        HS à ajouter:

        • pourquoi string et pas std::string ? ça pue le using namespace std;
        • Partager sur Facebook
        • Partager sur Twitter

        problème distance de livenstein

        × 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