C# :: Aufgabe #398 :: Lösung #3
4 Lösungen
#398
String abwechselnd neu anordnen
Anfänger - C#
von JKooP
- 15.05.2021 um 10:48 Uhr
Gegeben ist ein String (Text) bestehend aus Kleinbuchstaben und Ziffern.
Ziel ist es diesen String neu anzuordnen, sodass sich Kleinbuchstaben und Ziffern abwechseln.
D.h., auf einen Kleinbuchstaben darf kein Kleinbuchstabe und auf eine Ziffer keine weitere Ziffer folgen.
Die Reihenfolge der Zeichen-Gruppen (Kleinbuchstaben bzw. Ziffern) darf nicht verändert werden.
Sind beide Zeichengruppen gleich lang, ist es egal mit welchem Zeichen begonnen wird.
Gibt es keine Lösung, soll ein Leer-String zurückgegeben werden.
Beispiele:
s = "train1234"
Lösung: "t1r2a3i4n"
s = "1234567"
Lösung: "", da nur Ziffern
s = "abcdefg"
Lösung: "", da nur Buchstaben
s = "abcdef123"
Lösung: "", nicht abwechselnd möglich
s = "abcd1234"
Lösung: "a1b2c3d4" oder "1a2b3c4d"
Schreibe eine Methode/Funktion, die obige Aufgabenstellung umsetzt.
Viel Spaß
Ziel ist es diesen String neu anzuordnen, sodass sich Kleinbuchstaben und Ziffern abwechseln.
D.h., auf einen Kleinbuchstaben darf kein Kleinbuchstabe und auf eine Ziffer keine weitere Ziffer folgen.
Die Reihenfolge der Zeichen-Gruppen (Kleinbuchstaben bzw. Ziffern) darf nicht verändert werden.
Sind beide Zeichengruppen gleich lang, ist es egal mit welchem Zeichen begonnen wird.
Gibt es keine Lösung, soll ein Leer-String zurückgegeben werden.
Beispiele:
s = "train1234"
Lösung: "t1r2a3i4n"
s = "1234567"
Lösung: "", da nur Ziffern
s = "abcdefg"
Lösung: "", da nur Buchstaben
s = "abcdef123"
Lösung: "", nicht abwechselnd möglich
s = "abcd1234"
Lösung: "a1b2c3d4" oder "1a2b3c4d"
Schreibe eine Methode/Funktion, die obige Aufgabenstellung umsetzt.
Viel Spaß
#3
von Heftog (300 Punkte)
- 06.06.2021 um 00:40 Uhr
C#-Code
using System; using System.Linq; namespace TestFramwork { public class Program { public static void Main() { try { string[] test = new string[] { "train1234", "1234567", "abcdefg", "abcdef123", "abcd1234", "abcd12345" }; foreach(string s in test) { Console.WriteLine($"Ergebniss zu:\ninput: {s}\noutput: {HandleString(s)}\n\n"); } } catch (Exception ex) { string error = ex.ToString(); } } private static string HandleString(string input) { int countLetter = input.ToCharArray().Count(c => char.IsLetter(c)); int countDigit = input.ToCharArray().Count(c => char.IsDigit(c)); if ((countLetter + 1 == countDigit || countLetter - 1 == countDigit) || countDigit == countLetter) { string result = ""; //Deppends on which Counter is longer we set the chars int charIndex1 = countLetter < countDigit ? countLetter : 0; int charIndex2 = countLetter - charIndex1; bool charIndex1IsLetter = charIndex1 == 0; //FOR -> As long as the longest Counter is (Digit, Letter) for (int i = 0; i < (countLetter < countDigit ? countDigit : countLetter); i++) { //To avoid OutOfIndexEx check the possibility if (charIndex1 == input.Length || !(charIndex1IsLetter ? char.IsLetter(input[charIndex1]) : char.IsDigit(input[charIndex1]))) { result += input[charIndex2].ToString(); } else if (charIndex2 == input.Length || !(charIndex1IsLetter ? char.IsDigit(input[charIndex2]) : char.IsLetter(input[charIndex2]))) { result += input[charIndex1].ToString(); } else if (char.IsLetter(input[charIndex1IsLetter ? charIndex1 : charIndex2]) && char.IsDigit(input[!charIndex1IsLetter ? charIndex1 : charIndex2])) { result += input[charIndex1].ToString() + input[charIndex2].ToString(); } else { return ""; } charIndex1++; charIndex2++; } return result; } return ""; } } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1