Char ist ein Datentyp in Crystal, der einen 32-Bit-Unicode-Codepoint darstellt.
Seine Größe macht ihn speichereffizient und gibt ihm bestimmte Eigenschaften, die Strings nicht haben.
Er wird mit einfachen Anführungszeichen (') erstellt und erlaubt nur, dass ein einziger Unicode-Codepoint darin steht.
'a' # => 'a'
'a'.class # => Char
Es ist ganz üblich, mit Chars zu arbeiten, wenn du in Crystal mit Strings arbeitest, da einige Methoden der String-Klasse Chars zurückgeben oder Chars als Argumente nehmen.
Zum Beispiel gibt die Methode String#[] einen Char zurück, oder die Methode String#chars gibt eine Sammlung von Chars zurück.
Da ein Char ein 32-Bit-Unicode-Codepoint ist, unterstützt er das Erhöhen und Verringern. Wenn du also 'a' hast, kannst du durch Addieren von eins 'b' erhalten.
'a' + 5
# => 'f'
'z' - 25
# => 'a'
Es gibt auch eine Methode namens Char#succ, die den nächsten Char in der Unicode-Tabelle zurückgibt, und Char#pred, die den vorherigen Char in der Unicode-Tabelle zurückgibt.
'a'.succ
# => 'b'
'z'.pred
# => 'y'
Da ein Char nur dazu gedacht ist, ein 32-Bit-Unicode-Codepoint darzustellen, können zwei Chars nicht verkettet werden. Deshalb können Chars nur mit Strings verkettet werden.
'a' + "bc"
# => "abc"
'a' + 'b'
# => error: expected argument #1 to 'Char#+' to be Int or String, not Char
Crystal hat ein paar Methoden, um Informationen über ein Zeichen zu erhalten, etwa ob es eine Zahl oder ein Buchstabe ist oder ob es groß- oder kleingeschrieben ist. Hier ist eine Liste einiger dieser Methoden; eine vollständige Liste findest du in der Char API:
| Methode | Beschreibung |
|---|---|
Char#number? |
Gibt true zurück, wenn der Char eine Zahl ist |
Char#letter? |
Gibt true zurück, wenn der Char ein Buchstabe ist |
Char#lowercase? |
Gibt true zurück, wenn der Char kleingeschrieben ist |
Char#uppercase? |
Gibt true zurück, wenn der Char großgeschrieben ist |
Char#ascii? |
Gibt true zurück, wenn der Char ein ASCII-Zeichen ist |
Char#whitespace? |
Gibt true zurück, wenn der Char ein Leerraumzeichen ist |
Da ein Char ein 32-Bit-Unicode-Codepoint ist, kannst du zwischen Chars und Codepoints (Int) umwandeln.
Das kannst du mit der Methode Char#ord machen, die den Codepoint des Chars zurückgibt, oder mit der Methode Int#chr, die den Char des Codepoints zurückgibt.
'a'.ord
# => 97
97.chr
# => 'a'
Wie bei anderen Datentypen gibt es bei Chars ein paar Methoden zum Umwandeln zwischen Typen.
Die gebräuchlichste ist die Methode Char#to_s, die den Char in einen String umwandelt. Es gibt aber auch die Methode Char#to_i, die den Char in einen Int umwandelt, und die Methode Char#to_f, die den Char in einen Float umwandelt.
'a'.to_s
# => "a"
'4'.to_i
# => 4
'a'.to_i
# => Error: Invalid integer: a (ArgumentError)
Die Bibliothek von Luton ist eine große Bibliothek mit einer umfangreichen Sammlung von Literatur, von Büchern bis hin zu Kunst. Die Bibliothek hat eine Abteilung, in der Literatur erforscht und Bücher in das Computersystem eingetragen werden.
Bestimmte Bereiche sollen automatisiert werden, und du wirst gebeten, dabei zu helfen. Dazu gehört, Abläufe von der Automatisierung der Formulare für den Eintragungsprozess bis hin zum Entschlüsseln von Texten zu unterstützen.
Die Bücher einer Bibliothek sollen leicht zu finden sein, deshalb werden sie nach dem ersten Buchstaben des Titels sortiert.
Implementiere die Methode Library.first_letter, die ein Argument title entgegennimmt, das den Titel des Buchs enthält.
Die Methode soll den ersten Buchstaben des Titels zurückgeben.
Library.first_letter("Mystery of the Crystal Skull")
# => 'M'
Die Bibliothek hat viele Bücher, die von verschiedenen Autoren geschrieben wurden.
Autoren werden oft mit ihren Initialen bezeichnet, deshalb hat die Bibliothek ein System angefordert, das die Initialen eines Autors ausgibt, wenn man den Vornamen und den Nachnamen des Autors eingibt.
Die Initialen sollen folgendermaßen formatiert sein: {first_letter_of_first_name}.{first_letter_of_last_name}
Implementiere die Methode Library.initials, die zwei Argumente first_name und last_name entgegennimmt, die den Vornamen und den Nachnamen des Autors enthalten.
Die Methode soll die Initialen des Autors zurückgeben.
Library.initials("William", "Shakespeare")
# => "W.S"
Einige Literatur ist verschlüsselt, und die Bibliothek hat viele verschlüsselte Texte. Die Bibliothek hätte gern ein neues Entschlüsselungssystem für eine spezielle Verschlüsselung.
Die Verschlüsselung funktioniert so, dass der Buchstabe durch den im Alphabet vorangehenden Buchstaben ersetzt wird.
Zum Beispiel wird aus a ein z, aus b ein a, aus c ein b und so weiter.
Die Bibliothek möchte, dass sowohl Groß- als auch Kleinbuchstaben entschlüsselt werden können und dabei die Groß- bzw. Kleinschreibung des ursprünglichen Buchstabens erhalten bleibt.
Implementiere die Methode Library.decrypt_character, die ein Argument character entgegennimmt, das den zu entschlüsselnden Buchstaben enthält.
Die Methode soll den entschlüsselten Buchstaben zurückgeben.
Library.decrypt_character('a')
# => 'z'
Die Bibliothek möchte außerdem einen ganzen Text mit dieser Verschlüsselung entschlüsseln, die jeweils den vorangehenden Buchstaben im Alphabet nimmt.
Die Entschlüsselung soll nur Buchstaben entschlüsseln und alle anderen Zeichen unverändert lassen.
Implementiere die Methode Library.decrypt_text, die ein Argument text entgegennimmt, das den zu entschlüsselnden Text enthält.
Die Methode soll den entschlüsselten Text zurückgeben.
Library.decrypt_text("Ifmmp Xpsme!")
# => "Hello World!"
Melde dich bei Exercism an, um Crystal mit 26 Konzepte142 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.