2015-01-21 11 views
0

Всего ruby-baby здесь, я пытаюсь понять его, используя this Codecademy Tutorial. Попытка понять это лучше. Я даю дополнительные вопросы вращению и застревание при попытке, но я не понимаю, почему.Ruby: Как создать стек из пользовательского ввода?

So - Программа под рукой очень проста: она заменяет одно определяемое пользователем слово во входном слове с помощью слова REDACTED. Теперь: я хочу расширить список редактируемых слов до тех пор, пока пользователь не понравится, а не только один.

Вот моя попытка:

puts "Please enter your text here: " 
text = gets.chomp 
puts "Which words would you like to redact? " 
redact = gets.chomp 

words = text.split(" ") 
censorlist = redact.split(" ") 

=begin 
How do I build an array out of this .split to access all the words separately in my if-condition? 
=end 

words.each do |word| 
    if word != censorlist 
    print word + " " 
    else 
    print "REDACTED " 
end 
end 

Извините, если это слишком основной, чтобы спросить здесь, но я спиннинг это некоторое время, и все ответы я нашел в другом месте не имеет смысла для меня. Я просто не знаю, как получить доступ к массиву, который я создал с помощью .split. Спасибо!

-N.

+0

Я хотел бы сделать это 'печати words.map { | слово | censorlist.include? (слово)? "REDACTED": слово} .join ("") '. Это создаст массив, в котором слова в «censorlist» заменяются «REDACTED», а затем присоединятся к ним как «String» и печатают «String». Вы уже создали свои массивы с помощью 'split'. – engineersmnky

ответ

0
# ask the user for the text to process 
puts "Please enter your text here: " 
text = gets.chomp 

# ask for words to redact. `split()` will split into words by default 
puts "Which words would you like to redact? " 
redact = gets.chomp.split 

redact.each do |word| 
    # instead of printing each word, we CHANGE the text supplied 
    text.gsub!(word, 'REDACTED') 
end 
puts text 

Для получения дополнительной информации см String#split и String#gsub!

Update: в @engineersmnky указал, есть когда-либо более простой способ:

puts "Please enter your text here: " 
text = gets.chomp 
puts "Which words would you like to redact? " 
redact = gets.chomp 

# create a Regular Expression matching all words to redact 
regex = /#{redact.gsub(' ', '|')}/ 
puts text.gsub(regex, 'REDACTED') 
+1

Почему бы не сделать так, чтобы избежать итерации 'puts text.gsub (/ # {redact.join ('|')}/i, 'REDACTED')'. Это также позволяет учитывать нечувствительность к регистру, что является плюсом при редактировании. – engineersmnky

+0

Хороший вопрос! Не подумал об этом, если честно! – mhutter

+0

Спасибо всем! Это супер полезно! Мне нужно подробно изучить все предложения и попытаться понять, что они делают, поэтому это может занять некоторое время! – Nooby

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