C# :: Aufgabe #400 :: Lösung #1

1 Lösung Lösung öffentlich
#400

Ziffern durch Kleinbuchstaben ersetzen (right-shifting)

Anfänger - C# von JKooP - 22.05.2021 um 16:57 Uhr
Gegeben ist ein String (Text) bestehend aus Kleinbuchstaben und den Ziffern 0 bis 9.
Die Buchstaben stehen an den geraden und die Ziffern an den ungeraden Stellen (zero-based).
Ziel soll es sein, jede Ziffer durch einen Buchstaben zu ersetzen, indem der vorangestellte Buchstabe
um den Wert der Ziffer gemäß Alphabet nach rechts verschoben wird (right-shifting).
Die Buchstaben bleiben dabei erhalten.
Bei der Erstellung des Ausgangs-Strings soll darauf geachtet werden, dass das Verschieben nicht über 'z' hinausgeht.

Beispiele:

s = "a1c1e1"
Lösung: "abcdef", denn
a >> 1 -> b
c >> 1 -> d
e >> 1 -> f

s = "a4b2c1d5"
Lösung: "aebdcddi", denn
a >> 4 -> e
b >> 2 -> d
c >> 1 -> d
d >> 5 -> i

Erstelle eine Methode/Funktion, die obige Aufgabenstellung umsetzt.
Wer möchte kann die Aufgabe dahingehend erweitern, dass über 'z' hinaus
verschoben wird und das Alphabet von vorne beginnt.

Viel Spaß
#1
4 Kommentare
vote_ok
von JKooP (18090 Punkte) - 18.07.2021 um 10:42 Uhr
NET 5.x; C# 9.x; VS-2019
Quellcode ausblenden C#-Code
System.Console.WriteLine(ReplaceDigits("a4b2c1d5"));

static string ReplaceDigits(string s)
{
    var t = s.ToCharArray();
    for (int i = 1; i < t.Length; i+=2)
        t[i] = (char)(t[i - 1] + t[i] - '0');
    return new string(t);
}

Kommentare:

BaumHaus

Punkte: 0



2 Kommentare

#1
27.08.2021 um 12:36 Uhr
Kann mir den Code vielleicht jemand mal genauer erklären ?
post_arrow
708 0

JKooP

Punkte: 18090

680 Aufgaben
227 Lösungen
19 Kommentare

#2
27.08.2021 um 16:46 Uhr
Wenn man das Wort "bitte" in den Satz einbaut, dann bestimmt.
Was gibt es hier zu erklären? Arrays und der Umgang mit ASCII sind elementare Bestandteile der Programmierung.
Wie wäre es mit "debuggen"!? Den Inhalt der Schleife in Teile zerlegen und dann die Teilergebnisse vergleichen. So lernt es sich am besten.
post_arrow
709 0

BaumHaus

Punkte: 0



2 Kommentare

#3
06.09.2021 um 08:49 Uhr
Guten morgen JKoop,
ich entschuldige mich für die Formulierung meines erstrigen Kommentars.

Mit Arrays kenne ich mich bedingt aus, allerdings mit ASCII weniger.

Welche Relevanz hat die Null hier in diesem Code.
Lässt man " - '0'" weg, ist im Ergebnis eine Zeichenfolge ('\u0092' [Unicode?]) fest zu stellen.
Wieso ?

Danke im voraus
post_arrow
711 0

JKooP

Punkte: 18090

680 Aufgaben
227 Lösungen
19 Kommentare

#4
08.09.2021 um 08:28 Uhr
Hallo

Alle auf der Tastatur befindlichen Zeichen, so auch die Ziffern 0-9, sind im ASCII-Zeichensatz verankert.
Leider steht die Ziffer 0 nicht an erster respektive nullter Stelle, sondern sie
beginnen bei 48 und enden bei 57.

"a4b2c1d5"

Im ersten Schleifendurchlauf hat t[i] den Wert 52, da sich die Ziffer '4' vom Datentyp "Char" an der 52. Stelle im ASCII-Zeichensatz befindet.
Achtung: Array ist nullbasiert, d.h. die nullte Stelle ist 'a' und die erste '4'.
Will man daraus eine Integer-Zahl, also 4 erzeugen, muss man 48 von 52 abziehen.
In C-basierten Sprachen, zu der auch C# gehört, kann man statt -48 auch -'0' schreiben.
Der Compiler erkennt das und rechnet intern mit 48.
Am Ende wird 'a' + 4 gerechnet, was bedeutet, dass im ASCII-Zeichensatz um 4 Stellen nach rechts gegangen wird, was dem Zeichen 'e' entspricht.

Das funktioniert auch mit jedem anderen Zeichen, z.B. kann man zum Prüfen auf Kleinbuchstaben schreiben:
Quellcode ausblenden C#-Code
if(i > 97 && i < 122)
oder
Quellcode ausblenden C#-Code
if(i > 'a' && i < 'z')
oder ab C# 8
Quellcode ausblenden C#-Code
if(i is > 'a' and < 'z')


Gruß JKooP
post_arrow
712 0
Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
1970835

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.