是否可以在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解决它,并且似乎需要逐字符转换才能应用于字符串。
答案 0 :(得分:4)
密切关注the Challenge中问题的提示,然后使用String's tr
方法:
"test string".tr('a-z', 'c-zab')
# => "vguv uvtkpi"
解决问题的另一个提示是,您应该只处理字符。标点符号和空格应该保持不变。
在the Python Challenge的字符串上使用上面的tr
,您就会明白我的意思。
答案 1 :(得分:1)
使用String#each_char
和String#ord
以及Integer#chr
:
s = "test string"
s.each_char.map { |ch| (ch.ord + 2).chr }.join
# => "vguv\"uvtkpi"
s.each_byte.map { |b| (b + 2).chr }.join
# => "vguv\"uvtkpi"
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"