我正在研究这个编码挑战,我发现我被卡住了。我认为可以在传入的参数上调用.string方法,但现在我不确定。我在Ruby文档中找到的所有内容都表明不是这样。我真的很想在不看解决方案的情况下解决这个问题。有人可以帮助我推动正确的方向吗?
# Write a method that will take a string as input, and return a new
# string with the same letters in reverse order.
# Don't use String's reverse method; that would be too simple.
# Difficulty: easy.
def reverse(string)
string_array = []
string.split()
string_array.push(string)
string_array.sort! { |x,y| y <=> x}
end
# These are tests to check that your code is working. After writing
# your solution, they should all print true.
puts(
'reverse("abc") == "cba": ' + (reverse("abc") == "cba").to_s
)
puts(
'reverse("a") == "a": ' + (reverse("a") == "a").to_s
)
puts(
'reverse("") == "": ' + (reverse("") == "").to_s
)
答案 0 :(得分:4)
这是最简单的单行解决方案,用于在不使用#reverse
的情况下反转字符串,我遇到过 -
"string".chars.reduce { |x, y| y + x } # => "gnirts"
此外,我从未听说过#string
方法,我想您可能会尝试#to_s
。
答案 1 :(得分:2)
您需要停止搜索替代或聪明的方法,例如更改内容,以便.sort
。它过度思考问题,或者在某些方面避免考虑你被要求解决的核心问题。
这个测试试图让你去做的是理解String
的内部结构,并且可能会了解如何使用最基本的字符串操作来实现String#reverse
。< / p>
最基本的String
操作之一是从字符串中获取特定字符。您可以通过调用string[0]
来获取第一个字符,通常可以通过调用string[n]
来获取第n个字符(零索引)。
此外,您可以通过将它们添加到一起来组合或构建更长的字符串,例如如果您有a="hell"
和b="o"
,则c = a + b
会将"hello"
存储在变量c
中。
使用这些知识,找到一种循环原始字符串的方法,并使用它来构建反向字符串,一次一个字符。您可能还需要查找如何获取字符串的长度(另一种基本字符串方法,您可以在任何语言的字符串库中找到它),以及如何按顺序循环遍历数字。
答案 2 :(得分:2)
您正确地将其转换为数组。
def reverse(str)
str.chars.sort_by.with_index { |_, i| -i }.join
end
答案 3 :(得分:1)
最简单的方法来反转字符串
s = "chetan barawkar"
b = s.length - 1
while b >= 0
print s[b]
b=b-1
end
答案 4 :(得分:0)
这是我用来反转字符串而不使用.reverse方法的解决方案:
@string = "abcde"
@l = @string.length
@string_reversed = ""
i = @l-1
while i >=0 do
@string_reversed << @string[i]
i = i-1
end
return @string_reversed
答案 5 :(得分:0)
以为我会贡献我的菜鸟版本。
def string_reverse(string)
new_array = []
formatted_string = string.chars
new_array << formatted_string.chars.pop until formatted_string.empty?
new_array.join
end
答案 6 :(得分:0)
{{"First String "|add:"Second String"}}
答案 7 :(得分:-4)
看起来你的方式很好,但你也可以简单地使用
def reverse(string)
string.bytes.collect{|b|
-b+2*string.bytes.inject(0){|sum,add|
sum+add
}/string.length
}.pack'c*'
end
因为它将计算转移到整数域而不是计算机更自然的字符。当然它通过了所有测试:)