以奇怪的方式反转字符串

时间:2011-04-22 05:02:28

标签: ruby

我试图在不使用反向函数,类和数组的情况下反转字符串。但是我试图用正则表达式来做。我用Programmers Notepad来编写程序。当我运行下面给出的代码时,它不显示任何结果。我试图在每个循环的第七或第八个位置插入一个句点(。),以相反的顺序获取下一个字符。

s = "This is to test reverse of a string"
len = s.length
for j in len..1 do
    mycommand = "s.scan(/.$/) {|x| puts x}"
    mycommand = mycommand.insert 7,"."
end

4 个答案:

答案 0 :(得分:1)

你不能使用downto。这项工作有downto种方法。我不完全理解你想从这一行mycommand = mycommand.insert 7,"."得到什么,但它也反转了字符串:

s = "This is to test reverse of a string"
len = s.length
len.downto(1) do |j|
  s.scan(/.$/) {|x| puts x}
  s.chop!
end

答案 1 :(得分:1)

s="abc"
(s.size-1).downto(0).map{|x|s[x]}.join

答案 2 :(得分:1)

以下1个班轮可以解决问题:

> "test reverse of a string".scan(/./).inject([]) {|n,v| n.unshift v}.join
  => "gnirts a fo esrever tset" 

或更简洁:

> "test reverse of a string".scan(/./).inject("") {|n,v| n = v + n}
 => "gnirts a fo esrever tset" 

根据您的要求反转字符串。

我没有理解你关于在第7和第8位之间插入的问题的最后部分,所以我没有试图回答那部分。

答案 3 :(得分:1)

嗯,目前还不是很清楚你要做什么,但这里有一些观点:

因为你在循环(块)中声明'mycommand'变量 - 它只能在块中可见。意思是,你将无法在其他任何地方使用它。就像现在一样 - 每次迭代都会创建“mycommand”变量

这里:for j in len..1 do你的'len'变量(35)超过1.迭代不会发生,你应该像它一样使用它     j in 1..len do

这里:

mycommand = "s.scan(/.$/) {|x| puts x}"

将mycommand声明为字符串(只是一组字符) 那么,当你说:

mycommand = mycommand.insert 7,"."

ruby​​将按如下方式转换字符串:“s.scan(./.$/){| x | puts x}”

这个概念并不是很清楚,但我认为你要做的是:

s = "This is to test reverse of a string"
len = s.length
mycommand = "s.scan(/.$/) {|x| print x}" # This does not execute a command, you just create a string
for j in len..1 do
  eval mycommand # Now this executes your command. Take a time and google for "ruby eval"
  s.chop! # This removes last character from your string. e.g 'hello'.chop! #=> 'hell'  
end