Автор Тема: Работа со строками  (Прочитано 5839 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн alex

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
Работа со строками
« : 04 Марта 2001, 17:40:13 »
Вообще мне очень нужен скрипт, который бы переводил числа (от 0 до 9999) в их письменный эквивалент. Например: на входе - 1001, на выходе - "одна тысяча один".

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

  • Гость
Работа со строками
« Ответ #1 : 04 Марта 2001, 20:28:10 »
Цитировать
Alex (04-03-2001 17:40):
Вообще мне очень нужен скрипт, который бы переводил числа (от 0 до 9999) в их письменный эквивалент. Например: на входе - 1001, на выходе - "одна тысяча один".

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

split //,$str

Оффлайн lodevar

  • Сеньор-Помидор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 757
  • +0/-0
  • 2
    • Просмотр профиля
    • http://lodevar.hut.ru
Работа со строками
« Ответ #2 : 05 Марта 2001, 12:25:33 »
Цитировать
Alex (04-03-2001 17:40):
Если нет предположений где такой достать, подскажите plz как в Perl работать со строками. Например, есть у меня переменная, а вней записана строка "2333". Какой метод позволяет узнать, во-первых, сколько символов в переменной, во-вторых, какой символ стоит первым, вторым ...

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

Оффлайн alex

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
Работа со строками
« Ответ #3 : 06 Марта 2001, 02:03:29 »
Алгоритм такой:
Т.к. число максимум четырехзначное, то:
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

  • Сеньор-Помидор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 757
  • +0/-0
  • 2
    • Просмотр профиля
    • http://lodevar.hut.ru
Работа со строками
« Ответ #4 : 06 Марта 2001, 10:20:41 »
Вообще-то так не делают. Вернее делают не всегда. ;-) Почему? Объясню:
А что, если тебе понадобится не четырехзначное число, а пяти (шести....) Будешь скрипт заново переписывать с нуля? Именно так и получится!

Делается так:
Например есть число 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), но после них говоришь "тысяч,"тысяча", "тысячи" (смотря по контексту). И так далее по троякам, но пишешь миллионы, миллиарды.... Сколько хош ;-)

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

Если надо расскажу как это все написать.
С наилучшими пожеланиями. LODEVAR

Оффлайн alex

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
Работа со строками
« Ответ #5 : 06 Марта 2001, 21:24:52 »
О-о-о-о-громнейшее спасибо за алгоритм.
Но есть одно "но". Конкретнее, операция "берешь" меня смущает больше всего. Например, в C++ у класса CString есть метод Mid, если мне не изменяет память, который позволяет "брать" любые символы из строки.

А как это делается на Perl???

Еще раз спасибо!

  • Гость
Работа со строками
« Ответ #6 : 07 Марта 2001, 03:00:18 »
Не совсем в тему. Тут решение задачи на ПХП
http://php.spb.ru/php/propis.html

Оффлайн Light Elf

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 66
  • +0/-0
  • 0
    • Просмотр профиля
Работа со строками
« Ответ #7 : 07 Марта 2001, 22:22:27 »
$a = substr ($переменная, $длина, $смещение);
или наоборот, не помню точно:
$a = substr ($переменная, $смещение, $длина);

$n = lenght $переменная; - длина строки.
С уважением,
Light Elf

Оффлайн alex

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
Работа со строками
« Ответ #8 : 09 Марта 2001, 03:03:32 »
Цитировать
NAS (07-03-2001 03:00):
Не совсем в тему. Тут решение задачи на ПХП
http://php.spb.ru/php/propis.html

А на Perl такого скрипта нет???

  • Гость
Работа со строками
« Ответ #9 : 09 Марта 2001, 03:19:39 »
Есть конечно :)
Просто пользуйтесь Яндексом по чаще.
http://www.yandex.ru/yandsearch?text=число+прописью+perl

http://www.webclub.ru/repository/archive/cgi-scripts/PerlNumPropis.zip

Оффлайн alex

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
Работа со строками
« Ответ #10 : 10 Марта 2001, 02:13:30 »
Спасибо и за адрес и за Yandex. Но  в силу того, что этот язык пока представляется для меня чем-то недосягаемыми, из предложенного файла я мало что понял.
Но попробовал сделать из варианта на PHP то же самое на перл. И вот что вышло http://www.sidalex.narod.ru/propis.txt.
Но почему-то скрипт не работает. (И ошибки он тоже не выдает). Просто-напросто появляется пустой экран, да и все.
Кто может, подскажите, plz, в чем ошибка!!!

С уважением,
Александр

Оффлайн alex

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
Работа со строками
« Ответ #11 : 10 Марта 2001, 02:16:27 »
Скрипт немного ошибся. В адресе не должно быть точки.

http://www.sidalex.narod.ru/propis.txt

 

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