Печать реверса какой-либо Строки, не используя предопределенной функции?

Как распечатать реверс Строки java is object orientated language не используя предопределенной функции как reverse()?

6
задан Aruna 16 November 2016 в 02:39
поделиться

7 ответов

Вы можете делать это либо рекурсивно, либо итеративно (зацикливание).

Итеративно:

 static String reverseMe(String s) {
   StringBuilder sb = new StringBuilder();
   for(int i = s.length() - 1; i >= 0; --i)
     sb.append(s.charAt(i));
   return sb.toString();
 }

Рекурсивно:

 static String reverseMe(String s) {
   if(s.length() == 0)
     return "";
   return s.charAt(s.length() - 1) + reverseMe(s.substring(0,s.length()-1));
 }
49
ответ дан 8 December 2019 в 02:00
поделиться

Прежде всего: зачем изобретать велосипед?

При этом: петля по длине строки до 0 и объединить в другую строку.

3
ответ дан 8 December 2019 в 02:00
поделиться

Это простейшее решение:

System.out.print("egaugnal detatneiro tcejbo si avaj");
57
ответ дан 8 December 2019 в 02:00
поделиться

Вот рекурсивное решение, которое просто печатает строку в обратном порядке. Это должно быть образовательным, если вы пытаетесь изучить рекурсию. Я также сделал это «неправильным», фактически имея 2 print операторов; один из них следует закомментировать. Попробуйте мысленно прикинуть какой, или просто проведите эксперименты. В любом случае, извлеките уроки из этого.

static void printReverse(String s) {
    if (!s.isEmpty()) {
        System.out.print(s.substring(0, 1));
        printReverse(s.substring(1));
        System.out.print(s.substring(0, 1));
    }
}

Бонусные баллы, если вы ответите на эти вопросы:

  • Каковы требования к стеку? Склонен ли он к переполнению стека ?
  • Это хвостовая рекурсия ?
1
ответ дан 8 December 2019 в 02:00
поделиться

Ну, печать себя предполагает предопределенную функцию...

Предположительно, однако, можно получить символы и конкатенировать их вручную в обратном порядке (т.е. выполнить обратный цикл). Конечно, можно сказать, что concatenation - это предопределенная функция... так что, возможно, сам массив char. Но опять же... почему?

Разрешено ли в исходнике содержать "egaugnal detatneiro tcejbo si avaj" ;-p

Также - обратите внимание, что инверсия строк на самом деле довольно сложна, если учитывать объединение символов Юникода, суррогатные пары и т.д. Следует отметить, что большинство механизмов обратного преобразования строк работают только с наиболее распространенными случаями, но могут испытывать трудности с i18n.

8
ответ дан 8 December 2019 в 02:00
поделиться

Как насчет простого перехода от конца строки к начало:

void printRev(String str) {
 for(int i=str.length()-1;i>=0;i--)
  System.out.print(str.charAt(i));
}
6
ответ дан 8 December 2019 в 02:00
поделиться
final String s = "123456789";
final char[] word = s.toCharArray();
final int l = s.length() - 2;
final int ll = s.length() - 1;
for (int i = 0; i < l; i++) {
    char x = word[i];
    word[i] = word[ll - i];
    word[ll - i] = x;
}
System.out.println(s);
System.out.println(new String(word));

Вы можете делать это либо рекурсивно, либо итеративно (зацикливаясь).

Iteratively:

static String reverseMe(String s) {
    StringBuilder sb = new StringBuilder();
    for (int i = s.length() - 1; i >= 0; --i)
        sb.append(s.charAt(i));
    return sb.toString();
}

Recursively:

static String reverseMe(String s) {
    if (s.length() == 0)
        return "";
    return s.charAt(s.length() - 1) + reverseMe(s.substring(1));
}

Integer i = new Integer(15);
test(i);
System.out.println(i);
test(i);
System.out.println(i); 
public static void test (Integer i) {
    i = (Integer)i + 10;
}
1
ответ дан 8 December 2019 в 02:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: