Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка символов в строке, помощь 
:(
    Опции темы
forventus
Дата 30.9.2012, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 15.9.2012

Репутация: нет
Всего: нет



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

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>'
PM MAIL   Вверх
Rikkit
Дата 30.9.2012, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 19.7.2011

Репутация: нет
Всего: нет



Чтобы преобразовать символ в код символа вам нужен метод ord
Код

c = "a".ord

А метод each_byte создает Enumerator, у которого не определен метод >=
PM MAIL   Вверх
forventus
Дата 30.9.2012, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 15.9.2012

Репутация: нет
Всего: нет



Код
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 

   

Это сообщение отредактировал(а) forventus - 30.9.2012, 13:51
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1049 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.