2017-11-25 2 views
-4

Ich weiß nicht, wie ich keine direkte Antwort will Ich will wissen, wie kann ich. Vielen Dank im Voraus.Rekursive Umkehrstring C#

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine("Enter a word or sentence to be reversed: "); 
     string str = Console.ReadLine(); 
     Console.WriteLine("**********"); 
     Console.WriteLine("Your input is: "); 
     Console.WriteLine(str); 
     Console.ReadLine();//to give a little bit space between the outputs 
     Console.WriteLine("************"); 
     Console.WriteLine("And it will be reversed as : "); 
     //call the Recursive Function in the class Recursive 
     str = Recursive.Recursive_Func(str); 
     Console.WriteLine(str); 
     Console.ReadLine(); 
    } 
} 


Wir verwenden Substring aus dem n-1-Index in der Zeichenfolge und am Ende mit dem ersten Index in der Zeichenkette zu drucken, die [0] ist.

class Recursive 
{ 
    public static string Recursive_Func(string str) 
    { 
     if (str.Length <= 1) //the program base case 
     { 
      return str; 
     } 
     else 
     { 
      return Recursive_Func(str.Substring(1)) + str[0]; 
     } 
    } 
} 
+0

Normalerweise kann man die Frage vermuten ist: „Wie kann Ich repariere mein kaputtes Programm? " Soweit ich das beurteilen kann, ist das Programm korrekt. Es kehrt eine Zeichenfolge durch Rekursion um. Was ist deine eigentliche Frage? Wie kannst du * was *? –

+1

Siehe auch: [Der beste Weg, um eine Zeichenkette umzukehren] (https://stackoverflow.com/questions/228038/best-way-to-reverse-a-string) – Jimi

Antwort

0

Ihre Implementierung ist naiv und langsam, aber es ist rekursiv, und es funktioniert. Die nachfolgende Umsetzung wandelt die Zeichenfolge in einen char-Array, eine rekursive Hilfsmethode verwendet die Zeichen an Ort und Stelle umgekehrt, und wandelt die umgekehrte Anordnung in eine Zeichenkette:

class Recursive 
{ 
    public static string StrRev(string s) 
    { 
     if (string.IsNullOrEmpty(s)) return s; 
     var a = s.ToCharArray(); 
     return new string(CharArrRev(a, 0, a.Length - 1)); 
    } 

    private static char[] CharArrRev(char[] a, int i, int j) 
    { 
     if (i >= j) return a; 
     var c = a[i]; a[i] = a[j]; a[j] = c; 
     return CharArrRev(a, i + 1, j - 1); 
    } 
}