2009-11-13 4 views
1

J'essaye d'écrire une méthode qui utilise la récursivité pour comparer les chaînes str1 et str2 et déterminer laquelle d'entre elles vient en premier par ordre alphabétique (ie, selon l'ordre utilisé pour les mots dans un dictionnaire).Utilisation de la récursivité pour comparer les chaînes pour déterminer la première alphabétique Java

Si str1 vient en premier par ordre alphabétique, la méthode doit renvoyer int 1.

Si str2 vient en premier par ordre alphabétique, la méthode devrait retourner le int 2. Si les deux chaînes sont identiques, la méthode doit renvoyer la valeur int 0.

Je sais qu'il ya une méthode compareTo dans l'API Java, mais je voudrais savoir comment faire cela sans que cela

C'est ce que j'ai à ce jour, mais je ne suis pas entièrement sûr de savoir comment a procédé

} if (str1.length().equals(str2.length())) 

     return 0; 
    } else { 
     (str.substring(1, str.length())); 

Toutes les idées seraient grandement appréciés

+1

Travail à domicile? Y a-t-il une raison pour laquelle vous devez utiliser la récursivité? D'ailleurs, s'il y a le pire moyen de résoudre ce type de problème, la récursivité est probablement assez proche. – GalacticCowboy

+0

J'essaie de pratiquer en utilisant récursif – NuNu

+0

tag comme java, s'il vous plaît. – fserb

Répondre

4

Faire une méthode int recursiveCompare(String string1, String string2, int index). Initialement appelez-le avec index = 0. Comparez string1.charAt(index) et string2.charAt(index), et si elles sont différentes, retour 1 ou 2. Si elles sont les mêmes, retour recursiveCompare(string1, string2, index + 1).

Bien sûr, vous devrez vérifier les longueurs de string1 et string2 avant d'appeler charAt(index). S'ils atteignent tous deux la fin en même temps, ils sont égaux, alors renvoyez 0. Sinon, renvoyez le numéro de celui qui s'est terminé.

Et oui, la récursivité est à peu près le pire moyen de faire cela, LOL.

0

Pas de récursion nécessaire ... (sauf mention expresse nécessaire dans le travail à domicile (?) Assignement ...)

Comme cela ressemble beaucoup comme les devoirs, je vais vous donner quelques conseils

Utilisez une variable entière, disons i, pour indexer de 0 à la longueur de la chaîne la plus courte. Tant que str1 [i] == str2 [i] et que la dernière valeur d'index n'a pas été atteinte, augmentez i. Si vous atteignez la dernière valeur possible pour l'indice, la chaîne plus courte vient en premier (ou ils sont considérés comme égaux si même longueur ...)

Sinon, comparer premier caractère différent, et décider quelle chaîne est d'abord en conséquence ... Pourrait être aussi simple que:
return (str1 [i] < str2 [i]);

Si vous devez récursion ... (et il a été facilement dit dans d'autres commentaires, ce genre de problème est vraiment pas un candidat logique/valide pour récursion ...)

L'idée est de avoir une fonction de ce type d'interface:

int RecursCompare(string str1, string str2, int i) 

et qui appelle lui-même, en passant les mêmes valeurs pour str1 un str2 et passant à la valeur suivante pour i (i + 1), aussi longtemps que str1 [i] = = str2 [i] ET ni str1 ni str2 ne se trouvent à la fin. Lorsque cette condition devient fausse, la récursivité se termine et la fonction retourne la valeur appropriée pour indiquer que Str1 est alphabétiquement avant ou après Str2.

0

#include <stdio.h>
main() {

            charbon str1 [100], str2 [100];
            int i = 0, k = 0;  
            puts ("Entrer la chaîne 1");
            obtient (str1);
            puts ("Entrer la chaîne 2");
            obtient (str2);
i = comp (str1, str2,0);
            printf ("\ ncount est% d% d \ n", i, strlen (str1));
          (strlen (str1) == strlen (str2)) ((strlen (str1) == i) printf ("sont tous deux égaux"):? Printf ("Les deux ne sont pas               equal ")): printf (" Les deux ne sont pas égaux ");

}
int comp (char s1 [], char s2 [], int i)
{
printf ("\ n% c% c", s1 [i], s2 [i]);
int somme = 0, compte = 1;
si ((s1 [i]! = '\ 0') || (s2 [i]! = '\ 0'))
{
si (s1 [i] == s2 [i])
{
retour (count + = comp (s1, s2, ++ i));
}
sinon
{
return 0;
}
}
sinon
{
return 0;
}
nombre de retours;

}

Questions connexes