2012-04-29 4 views
1

Я пытаюсь создать программу, в которую вводятся две строки. Если они совпадают, они возвращают число позиций, где они содержат одну и ту же длину 2 подстроки.ruby ​​метасимволы с соответствующей строкой

, например: string_match («xxcaazz», «xxbaaz») → 3 «хх» «аа» «аз» Мой вопрос: что метасимволы я должен использовать для проверки

вот что я придумал с

puts "enter word" 
a = STDIN.gets 
a.chomp! 
puts"enter word" 
b = STDIN.gets 
b.chomp! 
if a == /word/ or b == /word/ then 
    puts str.match(/{a} {b}/) + "equal" 
end 

ответ

1

ОБНОВЛЕНО ОТВЕТ:

(Still шипами, но лучше)

first_word = 'xxcaazz'.split('') 
second_word ='xxbaaz'.split('') 

first_word_length = first_word.length 
second_word_length = second_word.length 

if [first_word_length, second_word_length].min == first_word_length 
    inner_word = second_word 
    outter_word = first_word 
else 
    inner_word = first_word 
    outter_word = second_word 
end 

outter_word_length = outter_word.length - 2 

word_matches = 0 

(0..outter_word_length).each do |character| 
    if "#{outter_word[character]}#{outter_word[character + 1]}" == "#{inner_word[character]}#{inner_word[character + 1]}" 
    puts "#{outter_word[character]}#{outter_word[character + 1]}" 
    word_matches += 1 
    end 
end 

puts "Found #{word_matches} matches" 

ORIGINAL SPIKE:

Это может вас покинуть на хорошее начало (хотя это ни в коем случае пуленепробиваемые, только быстрый шип): средства

first_word = 'xxcaazz'.split('') 
second_word ='xxbaaz'.split('') 
first_word_length = first_word.length 

(0..first_word_length).each do |character| 
    if "#{second_word[character]}#{second_word[character + 1]}" == "#{first_word[character]}#{first_word[character + 1]}" 
    puts "#{second_word[character]}#{second_word[character + 1]}" 
    end 
end 
+0

спасибо за вашу помощь – user1239333

+0

не problemo, user1239333 :) – kikuchiyo

1

Распаковать «a2x» извлечь 2 байта, затем перемотать 1 байт:

first_word = 'xxcaazz' 
second_word ='xxbaaz' 
tokens = first_word.unpack 'a2X' * (first_word.length - 1) 
# => ["xx", "xc", "ca", "aa", "az", "zz"] 
tokens.flat_map{|m| second_word.scan m} 
# => ["xx", "aa", "az"] 
+0

+1, это действительно круто! Благодарю. – kikuchiyo

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