Программирование > Perl
Работа со строками
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), но после них говоришь "тысяч,"тысяча", "тысячи" (смотря по контексту). И так далее по троякам, но пишешь миллионы, миллиарды.... Сколько хош ;-)
Подумай! Если сможешь сделать сотни и тысячи, то дальше останется ерунда (небольшая доработка текста), а смысла от такого скрипта больше.
Если надо расскажу как это все написать.
Навигация
Перейти к полной версии