Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсчет символов в строке 
:(
    Опции темы
rodendron
Дата 24.11.2006, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 22.3.2005

Репутация: нет
Всего: нет



Добрый вечер,

Есть строка такого типа: Кор#ова п#ошла в м#агаз#ин.

Как оптимальнее всего подсчитать количество символов # в строке? (в данном случае их 3)
PM MAIL   Вверх
mr.Anderson
Дата 24.11.2006, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 1
Всего: 128



Легко.
Код

<?php

 $str = "Кор#ова п#ошла в м#агаз#ин.";

 $howmuch = 0;
 for( $i=0; $i<strlen($str)-1; $i++ )
  if( $str[ $i ] === '#' )
   ++$howmuch;

 echo $howmuch; 

?>



--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
ZlojEzh
Дата 24.11.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

Репутация: 10
Всего: 15



substr_count()
PM MAIL ICQ   Вверх
mr.Anderson
Дата 24.11.2006, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 1
Всего: 128



Надо же. А я и не знал про такую функцию. Полезная штука. smile Я, значит, просто написал ее заменитель?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Mal Hack
Дата 24.11.2006, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Да. Хотя, вариант while( pos() !== FALSE ) $c++;
Был бы оптимальнее.
PM ICQ   Вверх
SelenIT
Дата 25.11.2006, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Mal Hack, оптимальнее чем for или чем встроенная функция? И почему?
А если бы не было встроенной функции, то можно было бы сделать еще так: $howmuch = count(explode($substr ,$str)) - 1;


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Mal Hack
Дата 25.11.2006, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(SelenIT @  25.11.2006,  00:05 Найти цитируемый пост)
оптимальнее чем for или чем встроенная функция?

Чем for, конечно. Ну ты посчитай хотя бы кол-во твоих итерация - n, у меня же - столько, сколько символов.

Цитата(SelenIT @  25.11.2006,  00:05 Найти цитируемый пост)
$howmuch = count(explode($substr ,$str)) - 1; 

Расход памяти большой smile Не программивший на старых машинах придирки не поймет.
PM ICQ   Вверх
SelenIT
Дата 25.11.2006, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Mal Hack, сорри, я не сразу понял идею алгоритма за схематической записью (не опознал под "pos()" strpos с 3-м параметром). Действительно, так лучше.

Насчет расхода памяти в моей строчке согласен, но она вообще не была серьезным вариантом, ведь есть же встроенная ф-ция smile


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Mal Hack
Дата 25.11.2006, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(SelenIT @  25.11.2006,  00:40 Найти цитируемый пост)
не опознал под "pos()" strpos с 3-м параметром

Классный язык получается... PHPelphi smile))
PM ICQ   Вверх
SelenIT
Дата 25.11.2006, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



<sorry for="offtop">...тогда уж delPHPi smile</sorry>


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
rodendron
Дата 25.11.2006, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 22.3.2005

Репутация: нет
Всего: нет



Спасибки, друзья, огромное.
На этом тема закрыта.
А я чего-то не мог найти на php.net стандартную ф-ию((
PM MAIL   Вверх
ZlojEzh
Дата 25.11.2006, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

Репутация: 10
Всего: 15



еще чуточку не по теме...
Цитата(Mal Hack @  25.11.2006,  00:12 Найти цитируемый пост)
Чем for, конечно. Ну ты посчитай хотя бы кол-во твоих итерация - n, у меня же - столько, сколько символов.

не надо забывать, что strpos тоже пробегается по строке
и хоть это и встроенная функция - сложность алгоритма получится O(n*m)
где n - длина строки,  а m - количество искомых символов в ней
PM MAIL ICQ   Вверх
Mal Hack
Дата 25.11.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Тут получается двоякая ситуация. При кол-ве символов, которые есть в строке стремящимся к длине строки, возможно быстрее будет и for, а при стремлении оных к нулю - str_pos.

Добавлено @ 14:54 
ИМХО, вариант с str_pos нагляднее. Но это имхо.
PM ICQ   Вверх
SelenIT
Дата 25.11.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(ZlojEzh @  25.11.2006,  11:22 Найти цитируемый пост)
strpos тоже пробегается по строке

Но ведь не по всей строке же, а только со стартового индекса (вычисленного на прошлой итерации) до позиции следующего вхождения, итого в сумме получается, что итоговая сложность все равно O(n), независимо от количества искомых символов. А циклы в PHP сами по себе не шибко быстрые...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2745 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.