Getting an ASCII character code in Ruby using `?` (question mark) fails

RubyCharAscii

Ruby Problem Overview


I'm in a situation where I need the ASCII value of a character (for Project Euler question #22, if you want to get specific) and I'm running into an issue.

Being new to ruby, I googled it, and found that ? was the way to go: ?A or whatever. But when I incorporate it into my code, the result of that statement is the string "A"—no character code. Same issue with [0] and slice(0), both of which should theoretically return the ASCII code.

The only thing I can think of is that this is a ruby version issue. I'm using 1.9.1-p0, having upgraded from 1.8.6 this afternoon. I cheated a little going from a working version of Ruby, in the same directory, I figured I probably already had the files that don't come bundled with the .zip file, so I didn't download them.

So why exactly are all my ASCII codes being turned into actual characters?

Ruby Solutions


Solution 1 - Ruby

Ruby before 1.9 treated characters somewhat inconsistently. ?a and "a"[0] would return an integer representing the character's ASCII value (which was usually not the behavior people were looking for), but in practical use characters would normally be represented by a one-character string. In Ruby 1.9, characters are never mysteriously turned into integers. If you want to get a character's ASCII value, you can use the ord method, like ?a.ord (which returns 97).

Solution 2 - Ruby

How about

"a"[0].ord

for 1.8/1.9 portability.

Solution 3 - Ruby

Ruby Programming/ASCII

In previous ruby version before 1.9, you can use question-mark syntax.

?a

After 1.9, we use ord instead.

'a'.ord    

Solution 4 - Ruby

For 1.8 and 1.9

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

or

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

Solution 5 - Ruby

Found the solution. "string".ord returns the ascii code of s. Looks like the methods I had found are broken in the 1.9 series of ruby.

Solution 6 - Ruby

If you read question 22 from project Euler again you'll find you you are not looking for the ASCII values of the characters. What the question is looking for, for the character "A" for example is 1, its position in the alphabet where as "A" has an ASCII value of 65.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiondorrView Question on Stackoverflow
Solution 1 - RubyChuckView Answer on Stackoverflow
Solution 2 - RubyRyan CalhounView Answer on Stackoverflow
Solution 3 - RubyhiveerView Answer on Stackoverflow
Solution 4 - RubymarkView Answer on Stackoverflow
Solution 5 - RubydorrView Answer on Stackoverflow
Solution 6 - RubySchechterView Answer on Stackoverflow