Люди, подскажите ;-)
// Все это относительно PHP-скрипта
Есть строка, в ней может быть произвольное количество чисел, которые больше или равны 10 000. И их надо разбить на разряды (поставить пробелы). Как это сделать? :-)
Разбивка числа на разряды
Started By
Денис
, окт 14 2007 9:48
13 ответов в теме
#1 Опубликовано 14 Октябрь 2007 - 9:48
#2 Опубликовано 14 Октябрь 2007 - 18:23
Денис, конкретнее: есть строка "аааааа", из нее требуется получить стороку "вввввввв". А то так не понятно, о чем речь.
С нами сила Алхазашвили!
#3 Опубликовано 14 Октябрь 2007 - 18:38
А я в кажется понял, но не пойму, в чём проблема. Вроде бы задача решается влоб. Берётся эта строка и из неё генерится другая, какая надо. Или есть какие-то ограничения?
Я всё отдам за продолжение пути.
#4 Опубликовано 14 Октябрь 2007 - 18:46
Есть строка "что-то где-то nnnnn раз, и стоило оно nnnnnnnnn рублей", n — цифра. Надо получить строку "что-то где-то nn nnn раз, и стоило оно nnn nnn nnn рублей". Я не могу сообразить, как извлечь число, которое имеет больше 4 цифр. Ну или (что, наверное, правильнее здесь) 5 или более цифр подряд. От 0 до 9, соответственно. (ну и, по идее, чтобы первая не была нулем, но это уже мелочи).
#5 Опубликовано 14 Октябрь 2007 - 18:48
а как извлечь число, имеющее 5 и менее цифр?
Я всё отдам за продолжение пути.
#6 Опубликовано 14 Октябрь 2007 - 18:53
ну здесь количество цифр, думаю, роли не играет (разве что не одна). Просто я не очень хорошо знаю PHP; но после изучения функций, работающих со строками я таки не понимаю, как найти последовательность символов, когда комбинация их ограничена только набором символов.
#7 Опубликовано 14 Октябрь 2007 - 19:11
Для поиска -- Регулярные выражения тебе в помощь! см. функцию preg(). Но здесь это даже не нужно.
Я бы делал так: идешь по строке, посимвольно копируя ее в другую строку. Нашел цифру -- цикл { пока символ -- цифра пихаем ее в очередь, заодно считаем, сколько цифр в очередь запихали }. Следующий символ не цифра -- потрошим очередь: берем остаток от деления количества цифр в очереди на три. Вытаскиваем столько цифр в результирующую строку, добавляем пробел. Дальше { по три цифры достаем, лепим пробел, } пока не очистим очередь. И продолжаем посимвольно перегонять исходную строку в новую до следующей цифры.
Как-то так. Проход по строке один. Сильно тормозить не будет. Вроде все просто?
С нами сила Алхазашвили!
#8 Опубликовано 14 Октябрь 2007 - 19:14
Смотри в сторону регулярных выражений. Это функции pregmatch или eregmatch. Там можно как раз задать, чтобы он выдавал тебе куски из строки, которые состоят только из цифр (с возможной одной запятой в качестве знака разделителя) и имеют длинну больше четырех.
Есть даже pregreplace кажется.
Зато, обладая единственной в мире подводной орбитальной группировкой спутников глонасс...
#9 Опубликовано 14 Октябрь 2007 - 19:21
Ага, понятно :-) Да, теперь все кажется таким простым ;-) Спасибо большое!Как-то так. Проход по строке один. Сильно тормозить не будет. Вроде все просто?
Понятно, спасибо ;-)Смотри в сторону регулярных выражений.
Попробую оба варианта, ради обучения полезно :-) Спасибо еще раз всем, кто ответил ;-)
#10 Опубликовано 14 Октябрь 2007 - 19:56
Кстати, вариант, предложенный володей может быть и быстрей. Регулярные выражения - довольно нагрузочная штука. На этой задаче может не окупиться. Хотя в любом случае это будет очень быстро. Разница появится только при обработках очень больших массивов данных.
Зато, обладая единственной в мире подводной орбитальной группировкой спутников глонасс...
#11 Опубликовано 14 Октябрь 2007 - 20:25
ага :-)
но попробую я, все равно, и так, и так :-)
#12 Опубликовано 15 Октябрь 2007 - 21:44
че-то вспоминается вроде... :-D
preg_replace_callback тебе в помощь.
в callback-функцию помещаешь вызов number_format.
и все.
Come what may
#13 Опубликовано 16 Октябрь 2007 - 18:34
ага, понял :-) Спасибо!preg_replace_callback тебе в помощь.
в callback-функцию помещаешь вызов number_format.
и все.
#14 Опубликовано 17 Октябрь 2007 - 12:30
Все получилось, спасибо всем еще раз ;-)
Остановился таки на способе Володи с перебором строки.
0 пользователей читают эту тему
0 пользователей, 0 гостей, 0 невидимых