Перейти к содержимому


Фото

Разбивка числа на разряды


  • Чтобы отвечать, сперва войдите на форум
13 ответов в теме

#1 Денис Опубликовано 14 Октябрь 2007 - 9:48

Денис
  • Genius loci
  • 6 899 Сообщений:
  • Денис Сумин
Люди, подскажите ;-)
// Все это относительно PHP-скрипта
Есть строка, в ней может быть произвольное количество чисел, которые больше или равны 10 000. И их надо разбить на разряды (поставить пробелы). Как это сделать? :-)

#2 Syrano Опубликовано 14 Октябрь 2007 - 18:23

Syrano
  • Свои
  • 9 631 Сообщений:
  • Владимир Зайцев
Денис, конкретнее: есть строка "аааааа", из нее требуется получить стороку "вввввввв". А то так не понятно, о чем речь.

С нами сила Алхазашвили!


#3 Vasay Опубликовано 14 Октябрь 2007 - 18:38

Vasay
  • Свои
  • 3 761 Сообщений:
  • Василий Ломакин
А я в кажется понял, но не пойму, в чём проблема. Вроде бы задача решается влоб. Берётся эта строка и из неё генерится другая, какая надо. Или есть какие-то ограничения?
Я всё отдам за продолжение пути.

#4 Денис Опубликовано 14 Октябрь 2007 - 18:46

Денис
  • Genius loci
  • 6 899 Сообщений:
  • Денис Сумин
Есть строка "что-то где-то nnnnn раз, и стоило оно nnnnnnnnn рублей", n — цифра. Надо получить строку "что-то где-то nn nnn раз, и стоило оно nnn nnn nnn рублей". Я не могу сообразить, как извлечь число, которое имеет больше 4 цифр. Ну или (что, наверное, правильнее здесь) 5 или более цифр подряд. От 0 до 9, соответственно. (ну и, по идее, чтобы первая не была нулем, но это уже мелочи).

#5 Vasay Опубликовано 14 Октябрь 2007 - 18:48

Vasay
  • Свои
  • 3 761 Сообщений:
  • Василий Ломакин
а как извлечь число, имеющее 5 и менее цифр?
Я всё отдам за продолжение пути.

#6 Денис Опубликовано 14 Октябрь 2007 - 18:53

Денис
  • Genius loci
  • 6 899 Сообщений:
  • Денис Сумин
ну здесь количество цифр, думаю, роли не играет (разве что не одна). Просто я не очень хорошо знаю PHP; но после изучения функций, работающих со строками я таки не понимаю, как найти последовательность символов, когда комбинация их ограничена только набором символов.

#7 Syrano Опубликовано 14 Октябрь 2007 - 19:11

Syrano
  • Свои
  • 9 631 Сообщений:
  • Владимир Зайцев
Для поиска -- Регулярные выражения тебе в помощь! см. функцию preg(). Но здесь это даже не нужно. Я бы делал так: идешь по строке, посимвольно копируя ее в другую строку. Нашел цифру -- цикл { пока символ -- цифра пихаем ее в очередь, заодно считаем, сколько цифр в очередь запихали }. Следующий символ не цифра -- потрошим очередь: берем остаток от деления количества цифр в очереди на три. Вытаскиваем столько цифр в результирующую строку, добавляем пробел. Дальше { по три цифры достаем, лепим пробел, } пока не очистим очередь. И продолжаем посимвольно перегонять исходную строку в новую до следующей цифры. Как-то так. Проход по строке один. Сильно тормозить не будет. Вроде все просто? ;)

С нами сила Алхазашвили!


#8 KiberGus Опубликовано 14 Октябрь 2007 - 19:14

KiberGus
  • Genius loci
  • 6 561 Сообщений:
  • Алексей Гусейнов
Смотри в сторону регулярных выражений. Это функции pregmatch или eregmatch. Там можно как раз задать, чтобы он выдавал тебе куски из строки, которые состоят только из цифр (с возможной одной запятой в качестве знака разделителя) и имеют длинну больше четырех. Есть даже pregreplace кажется.
Зато, обладая единственной в мире подводной орбитальной группировкой спутников глонасс...
gentoo.gif

#9 Денис Опубликовано 14 Октябрь 2007 - 19:21

Денис
  • Genius loci
  • 6 899 Сообщений:
  • Денис Сумин

Как-то так. Проход по строке один. Сильно тормозить не будет. Вроде все просто? ;)

Ага, понятно :-) Да, теперь все кажется таким простым ;-) Спасибо большое!

Смотри в сторону регулярных выражений.

Понятно, спасибо ;-)

Попробую оба варианта, ради обучения полезно :-) Спасибо еще раз всем, кто ответил ;-)

#10 KiberGus Опубликовано 14 Октябрь 2007 - 19:56

KiberGus
  • Genius loci
  • 6 561 Сообщений:
  • Алексей Гусейнов
Кстати, вариант, предложенный володей может быть и быстрей. Регулярные выражения - довольно нагрузочная штука. На этой задаче может не окупиться. Хотя в любом случае это будет очень быстро. Разница появится только при обработках очень больших массивов данных.
Зато, обладая единственной в мире подводной орбитальной группировкой спутников глонасс...
gentoo.gif

#11 Денис Опубликовано 14 Октябрь 2007 - 20:25

Денис
  • Genius loci
  • 6 899 Сообщений:
  • Денис Сумин
ага :-) но попробую я, все равно, и так, и так :-)

#12 Wooster Опубликовано 15 Октябрь 2007 - 21:44

Wooster
  • Свои
  • 517 Сообщений:
  • Смирнoв Кoнстaнтин
че-то вспоминается вроде... :-D preg_replace_callback тебе в помощь. в callback-функцию помещаешь вызов number_format. и все.
Come what may

#13 Денис Опубликовано 16 Октябрь 2007 - 18:34

Денис
  • Genius loci
  • 6 899 Сообщений:
  • Денис Сумин

preg_replace_callback тебе в помощь.
в callback-функцию помещаешь вызов number_format.
и все.

ага, понял :-) Спасибо!

#14 Денис Опубликовано 17 Октябрь 2007 - 12:30

Денис
  • Genius loci
  • 6 899 Сообщений:
  • Денис Сумин
Все получилось, спасибо всем еще раз ;-) Остановился таки на способе Володи с перебором строки.




0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 невидимых