Lösungstipp #3 - Zeichenketten sind Ketten von (Unicode)-Zeichen
Für die Lösung dieser Aufgabe ist es wichtig, dass du folgende Aspekte kennst:
- Ein
string
(also eine Zeichenkette) ist ein Feld vonchar
(Zeichen) - In .NET werden in
strings
Unicode-Zeichen verwendet - Jedes Zeichen hat eine numerische ID und mit dieser kann “gerechnet” werden
ToCharArray - String in ein Feld von Zeichen konvertieren
Die Dokumentation der Methode findest du hier auf MSDN.
Mit der ToCharArray
Methode kannst du einen string
in ein Feld vom Datentyp char
konvertieren. Damit hast du nun lesenden und schreibenden Zugriff auf jedes einzelne Zeichen der Zeichenkette. Diese Methode kannst du wie folgt verwenden:
string eineZeichenkette = "Die Zeichenkette";
char[] einFeldMitZeichen = eineZeichenkette.ToCharArray();
Nun musst du noch überlegen wie du so ein Feld von Zeichen durchlaufen kannst und dabei jedes einzelne Zeichen bearbeiten kannst. Hört sich für mich nach einer Aufgabe für eine Schleife an ;-).
Unicode - Die Zeichenkodierung von .NET strings
Die von mir im Video gezeigte Unicode-Tabelle findest du hier
Beim Unicode Standard handelt es sich um einen Zeichensatz bzw. eine Zeichenkodierung. Damit ist gemeint, dass Buchstaben, Ziffern, Sonderzeichen, … ein digitaler Code zugewiesen wird. Im Kontext von Unicode hat beispielsweise A den Code bzw. die Id 65. Die Besonderheit bei Unicode, im Vergleich zu anderen Zeichenkodierungen wie zum Beispiel ASCII, ist, dass diese Zeichenkodierung Schriftzeichen aus allen Schriftkulturen und Zeichensystemen definiert. Somit kann mit diesem Zeichensatz nicht nur ein deutscher Text, sondern beispielsweise auch ein arabischer oder koreanischer Text abgebildet werden.
Die Tatsache, dass jedes Zeichen im Unicode eine feste dezimale Zahl hat, können wir uns für die Lösung dieser Aufgabe zu nutze machen. Der Ansatz ist, dass das Zeichen in seine entsprechende Zahl umgewandelt wird, dann um 13 erhöht wird und die resultierende Zahl wieder zurück in ein Unicode-Zeichen gewandelt wird. Das setzt natürlich voraus, dass die Buchstaben dem Alphabet nach aufsteigend im Unicode-Standard definiert sind, aber das ist der Fall wie du in dieser Tabelle sehr schön sehen kannst.
Convert - Zeichen in Unicode-Ids konvertieren (und umgekehrt)
Um ein Zeichen in seine Unicode-Id zu konvertieren verwendest du Convert.ToUInt16() Zurück (von Unicode-Id in ein Zeichen) geht es mit Convert.ToChar()
Zu diesen Methoden gibt es nichts weiter zu sagen. Hier noch ein Beispiel:
char einZeichen = 'B';
int codeDesZeichens = Convert.ToUInt16(einZeichen); // codeDesZeichens hat nun den Wert 66 - siehe Unicode-Tabelle
int codeDesNaechstenZeichens = codeDesZeichens + 1;
char dasNaechsteZeichen = Convert.ToChar(codeDesNaechstenZeichens); // nun haben wir ein C als dasNaechsteZeichen
BONUS: char.IsLetter - Überprüfen ob ein Zeichen ein Buchstaben ist
Die Methode
char.IsLetter
ist hier dokumentiert
In der Aufgabe ist beschrieben, dass Zahlen und Sonderzeichen nicht konvertiert bzw. verschlüsselt werden sollen. Mit der IsLetter
Methode kannst du überprüfen ob ein Zeichen ein Buchstaben oder etwas anderes ist. Mehr Tipps gebe ich jetzt aber nicht ;-).