2014-11-24 2 views
0

Итак, я пытаюсь найти последний символ из пользовательского ввода в Ruby.Ruby: Получить последний символ с пользовательского ввода

Я попытался following-

в
print "Enter in a string: " 
user_input = gets 
end_char = user_input[-1,1] 
puts "#{end_char} is the last char!" 

Но она возвращает "последний символ!". Я попытался

end_char = "test"[-1,1] 

и работает как надо (возвращает т). Но он не работает, когда я использую пользовательский ввод как строку вместо того, чтобы просто вводить в себя строку. Помогите?

+0

'chomp' обычно используется, но самый прямой способ - просто' получает [-2]] '. –

ответ

6

Итак, когда вы говорите «Ввод в строку», и вы набираете «foo», что вы делаете последнее? Ну, вы попали в ящик! Так что вы на самом деле захватили "foo\n".

Вызов user_input[-1,1] на самом деле возвращает \n символ возврата, который только что распечатывает возврат на выходе.

print "Enter in a string: " 
user_input = gets.chomp 
end_char = user_input[-1,1] 
puts "#{end_char} is the last char!" 

метод #chomp фактически удаляет символ возврата от входа.

Теперь, когда я запускаю его:

stacko % ruby puts.rb 
Enter in a string: hi Lupo90 
0 is the last char! 
2

Рассмотрим IRB сессию:

  1. Я введу "Foo":

    irb(main):001:0> user_input = gets 
    foo 
    "foo\n" 
    

    Я вошел "Foo", и для завершения ввода мне пришлось нажать . Возврат (или Ввод в зависимости от ОС и клавиатуры), который является окончанием строки «\ n» (или «\ r \ n») в зависимости от того, является ли ваша ОС * nix или Windows.

  2. Глядя на то, что я вошел:

    irb(main):002:0> user_input[-1] 
    "\n" 
    
  3. Вот что выводится. Обратите внимание на то, что одиночные кавычки находятся на отдельных строках, так как «\ п» является символ новой строки: (. Замыкающий nil является результатом puts и не важно для этого примера)

    irb(main):003:0> puts "'\n'" 
    ' 
    ' 
    nil 
    

Таким образом, gets возвратил все введенное, включая завершающую новую строку. Давайте исправим:

irb(main):004:0> user_input = gets.chomp 
foo 
"foo" 
irb(main):005:0> user_input[-1] 
"o" 
irb(main):006:0> puts '"%s" is the last char' % [user_input[-1]] 
"o" is the last char 

chomp используются для полосы косого конца строки с конца строки:

irb(main):010:0> "foo\n".chomp 
"foo" 
irb(main):011:0> "foo\r\n".chomp 
"foo" 

Это really common question на переполнении стека. Возможно, поиски этого помогли бы?

Смежные вопросы