Функция посимвольного сравнения строк с учетом регистра
Напишите функцию, которая принимает две строки a и b. Возвращает -1, если a < b. 0, если a == b. 1, если a > b Строка может содержать символы с кодами с 32 по 126. Максимальная длина строки 10^6 символов.
Одна строка меньше другой, если код первого символа первой строки меньше кода первого символа второй строки. Если коды одинаковые, то необходимо смотреть на вторые символы, и т.д.
Решаю эту задачу, но в моем решении что-то не верно, так как возвращает не то число, которому должен быть равен ответ при заданном условии. Может быть кто-нибудь подскажет где именно я не правильно написала код.
Вот мой код:
public static int compare(String a, String b){
char [] arrayA = a.toCharArray();
char [] arrayB = b.toCharArray();
int number = 0;
for (int i = 0; i < arrayA.length; i++){
for (int j = 0; j < arrayB.length; j++){
if (arrayA[i] < arrayB[j] ){
number = -1;
}
if (arrayA[i] > arrayB[j]){
number = 1;
}
if(arrayA[i] == arrayB[j]){
number = number;
}
}
}
return number;
}
Ответы (1 шт):
Вы зачем-то после проверки первых символов проверяете первый символ первой строки со вторым элементом, потом с третьим и т.д. Это так не работает, о чём пишет формулировка из условия задачи:
Одна строка меньше другой, если код первого символа первой строки меньше кода первого символа второй строки. Если коды одинаковые, то необходимо смотреть на вторые символы, и т.д.
Достаточно лишь пройтись одним for'ом, который будет идти до конца наименьшей строки, и сравнивать соответствующие элементы двух массивов. Если цикл закончится, а результат не будет найден, то проверяем между собой длины массивов; если они равны, то и сами строки тоже равны.
public static int compare(String a, String b){
char [] arrayA = a.toCharArray();
char [] arrayB = b.toCharArray();
int number = 0;
int n = Math.min(arrayA.length, arrayB.length); /* минимальный размер из двух строк,
* чтобы обошлось без переполнения
*/
for (int i = 0; i < n; i++){
if (arrayA[i] < arrayB[i]) {
return -1;
}
if (arrayA[i] > arrayB[i]) {
return 1;
}
}
if (arrayA.length > arrayB.length) return 1;
else if (arrayA.length < arrayB.length) return -1;
else return 0;
}