Использование рекурсии для сравнения строк, чтобы определить, что идет первым по алфавиту Java - PullRequest
1 голос
/ 13 ноября 2009

Я пытаюсь написать метод, который использует рекурсию для сравнения строк str1 и str2 и определения того, какие из них располагаются первыми в алфавитном порядке (т.е. в соответствии с порядком, используемым для слов в словаре).

Если str1 стоит первым в алфавитном порядке, метод должен вернуть int 1.

Если str2 стоит первым в алфавитном порядке, метод должен вернуть int 2.

Если две строки совпадают, метод должен вернуть int 0.

Я знаю, что в Java API есть метод сравнения, но я хотел бы знать, как это сделать без этого

Это то, что у меня есть, но я не совсем уверен, как поступить

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

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

Любые идеи будут с благодарностью

Ответы [ 3 ]

4 голосов
/ 13 ноября 2009

Сделай метод int recursiveCompare(String string1, String string2, int index). Сначала вызовите его с индексом = 0. Сравните string1.charAt(index) и string2.charAt(index), и, если они разные, верните 1 или 2. Если они одинаковые, верните recursiveCompare(string1, string2, index + 1).

Конечно, перед вызовом charAt(index) вам придется проверить длины строк1 и строк2. Если они оба достигают конца в одно и то же время, они равны, поэтому возвращаем 0. В противном случае возвращаем номер завершившегося.

И да, рекурсия - это худший способ сделать это, LOL.

0 голосов
/ 30 сентября 2013

# include
main ()
{
char str1 [100], str2 [100];
int i = 0, k = 0;
put ("Ввести строку 1");
Get (Str1);
Put ("Ввести строку 2");
Get (Str2);
i = comp (str1, str2,0);
printf ("\ ncount is% d% d \ n", i, strlen (str1));
(strlen (str1) == strlen (str2) )? ((strlen (str1) == i)? printf («Оба равны»): printf («Оба не равны»)): printf («Оба не равны»);

}
int comp (char s1 [], char s2 [], int i)
{
printf ("\ n% c% c", s1 [i], s2 [i] ]);
int sum = 0, count = 1;
if ((s1 [i]! = '\ 0') || (s2 [i]! = '\ 0')) < br /> {
if (s1 [i] == s2 [i])
{
return (count + = comp (s1, s2, ++ i));
}
еще
{
вернуть 0;
}
}
еще
{
вернуть 0;
}
возврат количества;

}

0 голосов
/ 13 ноября 2009

Рекурсия не требуется ... (Если это не требуется специально в домашнем задании (?) ...)

Поскольку это очень похоже на домашнюю работу, я просто дам несколько советов

Используйте целочисленную переменную, скажем, i, чтобы индексировать от 0 до длины более короткой строки. Пока str1 [i] == str2 [i], а последнее значение индекса не достигнуто, увеличивайте i. Если вы достигнете последнего возможного значения для индекса, то более короткая строка будет первой (или они будут считаться равными, если длина равна ...)

В противном случае сравните этот первый символ, который отличается, и решите, какая строка является первой соответственно ... Может быть так просто:
return (str1 [i]

Если рекурсия, вы должны ... (и это было легко сказано в других комментариях, такого рода проблема действительно не является логическим / действительным кандидатом для рекурсии ...)

Идея состоит в том, чтобы иметь функцию с таким интерфейсом:

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

и который вызывает себя, передавая те же значения для str1 и str2 и передавая следующее значение для i (i + 1), при условии, что str1 [i] == str2 [i] И ни str1, ни str2 не находятся на его конец. Когда это условие становится ложным, рекурсия заканчивается, и вместо этого функция возвращает соответствующее значение, чтобы указать, что Str1 находится в алфавитном порядке до или после Str2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...