Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > Обработка символов в строке


Автор: forventus 30.9.2012, 09:59
Хочу организовать массив вводящихся строк, потом посимвольное изменение в соответствии с массивом чисел на заданное число букв.
Код

arrays=[]
ars=[3,1,2,0,4]
  while true do#ввод строк
    str=gets.chomp
    break if str == ''
    arrays << str
  end
  arrays.each do |line|# начало построчной обработки массива 
    puts line
z=0
d=line.size-1#длина строки
for i in 0..d # для всей длины выполняем цикл
    c=line[i].each_byte# преобразование сиvвола в код символа
if c>="a".each_byte and c<="z".each_byte#если по коду символа это собственно символ
 g=ars.length#длина массива чисел
 c+=ars[z]#к коду символа прибавляем число из массива
 z+=1
 id z>g#если выходим за длину массива то переводим снова на первый элемент
 z=0# индекс первого элемента
end 
end 
puts c.pack("c")#вывод символа, преобразуя из кода в сам символ
end


такие ошибки:
14:in `block (2 levels) in <main>': undefined method `>=' for #<Enumerator: "s":each_byte> (NoMethodError)
        from c:/ru/33.rb:12:in `each'
        from c:/ru/33.rb:12:in `block in <main>'
        from c:/ru/33.rb:8:in `each'
        from c:/ru/33.rb:8:in `<main>'

Автор: Rikkit 30.9.2012, 11:20
Чтобы преобразовать символ в код символа вам нужен метод ord
Код

c = "a".ord

А метод each_byte создает Enumerator, у которого не определен метод >=

Автор: forventus 30.9.2012, 13:40
Код
arrays=[]
ars=[3,1,2,0,4]
  while true do
    str=gets.chomp
    break if str == ''
    arrays << str
  end
  g=ars.length 
  arrays.each do |line|
    z=0
    puts line
    d=line.size-1
    for i in 0..d
     c=line[i].ord
     if c>="a".ord and c<="z".ord
       c+=ars[z]
       z+=1
     end
     if z=g
      z=0
     end 
      print c.chr
    end
  end


Спасибо, работает почти как нужно. Но меняет символы только на значения первого элемента числового массива. Продвижение по числовому массиву не осуществляется, почему неясно, индекс вроде меняется (должен z+=1 ).





Всё, исправил.  В этом месте нужно было поставить второй знак "="
Код

if z==g
 z=0
end 

   

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)