我试图在不使用反向函数,类和数组的情况下反转字符串。但是我试图用正则表达式来做。我用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
答案 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