这是我的代码的一小部分,非常自我解释,它将所有字符从输入复制到temp并跳过空格。
input = gets.to_s.chomp
temp=String.new
for i in 0..input.length-1
if (input[i]==" ")
next
else
temp[i]=input[i]
end
end
puts "#{temp},END"
gets
然而,我用'hello world'输入测试它,它应该给我helloworld
但是我得到了
8:in '[]=':index 6 out of string(IndexError)
意味着问题在跳过空间时开始,出于某种原因。 请记住,如果我放置一个不包含空格的字符串,我不会收到任何错误
答案 0 :(得分:4)
每当需要字符串操作时,可能需要将字符串转换为其部件的数组,操纵这些部件然后将它们连接回字符串,但more often as not只需操作字符串本身,主要使用类String中的方法。在这里你可以Kernel#puts以下内容。
"%s END" % gets.delete(" \n")
#=> "helloworld"
String#delete删除Kernel#gets在输入的字符串末尾添加空格和返回字符("\n"
)。其中一个变体是"%s END" % gets.chomp.delete(" ")
。
另一种方式是puts
"%s END" % gets.gsub(/\s/, '')
#=> "helloworld"
正则表达式/\s/
会导致String#gsub删除所有空格,其中包括输入的空格(和制表符)以及"\n"
所附加的gets
字符串的结尾。
答案 1 :(得分:1)
我猜你的错误是由于字符串' hello world'你拒绝"拒绝"空格。在这种情况下,对于正在使用的字符串中的每个空格,temp将少一个。
您可以将input[i]
分配给当前temp.size位置的临时变量的空格,这样您就不会跳过索引。
可能是temp[temp.size]
或仅使用+=
修改临时值。
for i in 0...input.size
if input[i] == ' '
next
else
temp[temp.size] = input[i]
end
end
请注意,您可以替换for
的{{1}}循环(Ruby方式):
each
答案 2 :(得分:1)
如果您想跳过输入中的所有空白区域并打印输出,您可以使用单行显示:
puts "#{gets.chomp.split.join}, END"
在ruby中,您几乎不需要使用for
构造来编写循环,这与其他传统语言(如Java)不同。