Ruby String ASCII操作?

时间:2014-01-05 03:38:04

标签: ruby

是否可以在Ruby中执行一些ASCII选项,就像我们在Cpp中做的那样?

char *s = "test string";
for(int i = 0 ; i < strlen(s) ; i++) printf("%c",s[i]);
// expected output: vguv"uvtkpi

如何在Ruby中实现类似的目标?从一些研究中我认为String.each_byte可能对此有所帮助,但我正在考虑使用高阶编程(类似Array.map)来直接翻译字符串,而不使用显式for循环。

我正在尝试解决的任务:参考this page,我正在尝试使用Ruby解决它,并且似乎需要逐字符转换才能应用于字符串。

3 个答案:

答案 0 :(得分:4)

密切关注the Challenge中问题的提示,然后使用String's tr方法:

"test string".tr('a-z', 'c-zab')
# => "vguv uvtkpi"

解决问题的另一个提示是,您应该只处理字符。标点符号和空格应该保持不变。

the Python Challenge的字符串上使用上面的tr,您就会明白我的意思。

答案 1 :(得分:1)

使用String#each_charString#ord以及Integer#chr

s = "test string"
s.each_char.map { |ch| (ch.ord + 2).chr }.join
# => "vguv\"uvtkpi"

String#each_byte

s.each_byte.map { |b| (b + 2).chr }.join
# => "vguv\"uvtkpi"

String#next

s.each_char.map { |ch| ch.next.next }.join
# => "vguv\"uvtkpi"

答案 2 :(得分:0)

您可以使用代码点或each_codepoint方法,例如:

old_string = 'test something'
new_string = ''

old_string.each_codepoint {|x| new_string << (x+2).chr}

p new_string #=> "vguv\"uqogvjkpi"