2014-01-05 48 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"