Программирование > Perl

Работа со строками

(1/3) > >>

alex:
Вообще мне очень нужен скрипт, который бы переводил числа (от 0 до 9999) в их письменный эквивалент. Например: на входе - 1001, на выходе - "одна тысяча один".

Если нет предположений где такой достать, подскажите plz как в Perl работать со строками. Например, есть у меня переменная, а вней записана строка "2333". Какой метод позволяет узнать, во-первых, сколько символов в переменной, во-вторых, какой символ стоит первым, вторым ...

:

--- Цитировать ---Alex (04-03-2001 17:40):
Вообще мне очень нужен скрипт, который бы переводил числа (от 0 до 9999) в их письменный эквивалент. Например: на входе - 1001, на выходе - "одна тысяча один".

Если нет предположений где такой достать, подскажите plz как в Perl работать со строками. Например, есть у меня переменная, а вней записана строка "2333". Какой метод позволяет узнать, во-первых, сколько символов в переменной, во-вторых, какой символ стоит первым, вторым ...
--- Конец цитаты ---

split //,$str

lodevar:

--- Цитировать ---Alex (04-03-2001 17:40):
Если нет предположений где такой достать, подскажите plz как в Perl работать со строками. Например, есть у меня переменная, а вней записана строка "2333". Какой метод позволяет узнать, во-первых, сколько символов в переменной, во-вторых, какой символ стоит первым, вторым ...
--- Конец цитаты ---

Твое сообщение наводит на мысль, что ты не знаешь, как этот алгоритм реализовать в Perl\'е. То есть сам алгоритм ты знаешь.
Расскажи как ты собираешься это сделать, а я тебе расскажу то, что тебе еще нужно узнать...

alex:
Алгоритм такой:
Т.к. число максимум четырехзначное, то:
1. Анализирую сколько всего знаков (1 - единицы, 2-десятки, 3-сотни, 4-тысячи).
2. Беру из переменной первый знак. (В зависимости от результата из п.1. это либо единица либо сотня ...). (Например, исходное число 1001. 1 знак - "1". Присваиваю переменной значение "одна тысяча" => string = string + now где now - это "одна тысяча". (Если 1-ая цифра 8 - now = "Восемь тысяч". Всего 9 вариантов).
3. Беру второй знак (Если таковой имеется). (В зависимости от результата из п.1. это либо десяток, либо сотня ...). Проделываю тоже самое. (Еще + 9 вариантов сотен. Возвращаясь к примеру: "0" - значит не присваиваю ничего)
4. 3-й знак. еще + 10 вар. десятков
5. 4-й знак. еще + 10 вар. единиц.

В общих чертах алгоритм таков. В принцыпе, программка не сложная. Проблема в том, что я с Perl\'ом знаком всего 5 часов. Не знаю пока всех фокусов и особенностей.

С наилучшими пожеланиями.

lodevar:
Вообще-то так не делают. Вернее делают не всегда. ;-) Почему? Объясню:
А что, если тебе понадобится не четырехзначное число, а пяти (шести....) Будешь скрипт заново переписывать с нуля? Именно так и получится!

Делается так:
Например есть число 12345678

1) Делишь число на группы по три знака, начиная с конца! (12 345 678)
2) Делаешь функцию, которая смотрит три символа и делит их на сотни и десятки (6 78), берет сотни и говорит их прописью (шестьсот)
3) Делаешь функцию, которая смотрит на три символа и делит их на сотни и десятки (как и предыдущая), но берет десятки (78). Смотрит, если они от 1 до 19, то выбирает их из списка:
if($val==1)
{
  return "один";
}
...
if($val==19
{
  return "девятнадцать";
}
Ну а если больше 19, то берет сначала первую (7) и говорит прописью (семьдесят), берет вторую и говорит ее прописью (восемь). Все это он выбирает из такого же списка if\'ов.
Результат: шестьсот семьдесят восемь.

4) Запускаешь сначала первый трояк цифр и записываешь результаты вышеизложенных функций в строку (например $prop). Берешь следующий трояк и приписываешь их в начало строки $prop (например так: $prop=результат." ".$prop), но после них говоришь "тысяч,"тысяча", "тысячи" (смотря по контексту). И так далее по троякам, но пишешь миллионы, миллиарды.... Сколько хош ;-)

Подумай! Если сможешь сделать сотни и тысячи, то дальше останется ерунда (небольшая доработка текста), а смысла от такого скрипта больше.

Если надо расскажу как это все написать.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии