49 votes

L'obtention d'un code de caractère ASCII dans Ruby à l'aide de `?` (Point d'interrogation) échoue

Je suis dans une situation où j'ai besoin de la valeur ASCII d'un caractère (par Projet Euler à la question n ° 22, si vous voulez obtenir spécifique) et je suis en cours d'exécution dans un problème.

Étant nouveau pour ruby, je l'ai googlé et trouvé que, ? était la voie à suivre: ?A ou quoi que ce soit. Mais quand je l'intégrer dans mon code, le résultat de cette instruction est la chaîne de caractères "A"-pas de code de caractère. Même problème avec [0] et slice(0), qui, en théorie, doit retourner le code ASCII.

La seule chose que je peux penser, c'est que c'est une version de ruby question. Je suis en utilisant 1.9.1-p0, après avoir mis à niveau à partir 1.8.6 cet après-midi. J'ai triché un peu en cours à partir d'une version de Ruby, dans le même répertoire, j'ai pensé que je l'ai probablement déjà eu les fichiers qui ne sont pas livrés avec le .fichier zip, donc je n'ai pas les télécharger.

Alors, pourquoi sont tous mes codes ASCII en caractères?

70voto

Chuck Points 138930

Ruby avant 1.9 traités personnages quelque peu inégale. ?a et "a"[0] permettrait de renvoyer un nombre entier représentant la valeur de ASCII du caractère (ce qui n'était généralement pas le comportement des gens étaient à la recherche d'), mais dans la pratique, l'utilisation des caractères normalement être représenté par une chaîne de caractères. En Ruby 1.9, les personnages ne sont jamais mystérieusement transformée en nombres entiers. Si vous souhaitez obtenir un caractère ASCII de la valeur, vous pouvez utiliser l' ord méthode, comme ?a.ord (ce qui renvoie 97).

35voto

Ryan Calhoun Points 1135

Que diriez-vous

 "a"[0].ord
 

pour la portabilité 1.8 / 1.9.

12voto

mark Points 91

Pour 1.8 et 1.9

 ?a.class == String ? ?a.ord : ?a
 

ou

 "a".class == String ? "a".ord : "a"[0]
 

8voto

dorr Points 312

Trouvé la solution. "string" .ord retourne le code ASCII de s. On dirait que les méthodes que j'ai trouvées sont cassées dans la série 1.9 de ruby.

-2voto

Schechter Points 47

Si vous relisez la question 22 du projet Euler, vous constaterez que vous ne recherchez pas les valeurs ASCII des caractères. Ce que la question recherche, par exemple, le caractère "A" vaut 1, sa position dans l’alphabet, où "A" a une valeur ASCII de 65.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X