Obtenir un code de caractère ASCII dans Ruby en utilisant `?` (point d'interrogation) échoue
Je suis dans une situation où j'ai besoin de la valeur ASCII d'un caractère (pour Project Euler question #22, Si vous voulez être spécifique) et je rencontre un problème.
Étant nouveau sur ruby, je l'ai googlé, et j'ai trouvé que ?
était le chemin à parcourir: ?A
ou autre. Mais quand je l'incorpore dans mon code, le résultat de cette instruction est la chaîne "A"
- pas de code de caractère. Même problème avec [0]
et slice(0)
, qui devraient théoriquement renvoyer le code ASCII.
Le seul la chose à laquelle je peux penser est que c'est un problème de version ruby. J'utilise 1.9.1-p0, après avoir mis à jour à partir de 1.8.6 cet après-midi. J'ai triché un peu à partir d'une version de travail de Ruby, dans le même répertoire, j'ai pensé que j'avais probablement déjà les fichiers qui ne sont pas fournis avec le .fichier zip, donc je ne les ai pas téléchargés.
Alors pourquoi exactement tous mes codes ASCII sont-ils transformés en caractères réels?
6 réponses
Ruby Avant 1.9 a traité les caractères de manière quelque peu incohérente. ?a
et "a"[0]
retourneraient un entier représentant la valeur ASCII du caractère (qui n'était généralement pas le comportement que les gens recherchaient), mais en pratique, les caractères seraient normalement représentés par une chaîne d'un caractère. Dans Ruby 1.9, les caractères ne sont jamais mystérieusement transformés en entiers. Si vous voulez obtenir la valeur ASCII d'un caractère, vous pouvez utiliser la méthode ord
, comme ?a.ord
(qui renvoie 97).
Pour 1.8 et 1.9
?a.class == String ? ?a.ord : ?a
Ou
"a".class == String ? "a".ord : "a"[0]
Trouvé la solution. "chaîne".ord renvoie le code ascii de S. On dirait que les méthodes que j'avais trouvées sont brisées dans la série 1.9 de ruby.
Dans la version précédente de ruby Avant 1.9, vous pouvez utiliser la syntaxe des points d'interrogation.
?a
Après 1.9, nous utilisons ord à la place.
'a'.ord
Si vous lisez à nouveau la question 22 du projet Euler, vous constaterez que vous ne cherchez pas les valeurs ASCII des caractères. Ce que la question cherche, pour le caractère " A "par exemple est 1, sa position dans l'alphabet où as" A " a une valeur ASCII de 65.