2014-01-05 105 views
1

是否可以在Ruby中执行一些ASCII选项,就像我们在Cpp中所做的一样?Ruby字符串ASCII操作?

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来解决它,并且它似乎需要逐字符转换来应用于字符串。

+2

为什么?我们很少需要在Ruby中以这种级别进行操作,所以它听起来像是在用C++的方式来完成某些事情,而我们在Ruby中完全不同。解释你正在使用哪些数据,以及为什么,并且我们可能会向你展示Ruby的方式,而不是向你展示C++如何在Ruby中完成它。 –

+0

@TheTinMan Tin Man感谢您询问目的。我更新了我的问题。 – songyy

回答

4

狠抓在the Challenge对这个问题给出的提示,然后使用String's tr方法:

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

一个额外的提示来解决这个问题,你应该只处理字符。标点符号和空格应单独保留。

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

+0

不错的解决方案,Sn,即使你想转换空间:'tr('az','c-zab \'''') –

+0

当用单引号括起来时,不需要转义双引号:'' '.tr('',''')#=>“\”“'。 –

0

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

old_string = 'test something' 
new_string = '' 

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

p new_string #=> "vguv\"uqogvjkpi"