Разработчику. Сборник рецептов PHP
Задавайте вопросы

Посимвольная обработка строк

Вернуться назад

Задача

Нужно обработать каждый символ строки по отдельности.

Решение

Цикл по символам строки с помощью оператора for. В этом примере подсчитываются гласные в строке:

$string = "This weekend, I'm going shopping for a pet chicken.";
$vowels = 0;
for ($i = 0, $j = strlen($string); $i < $j; $i++) {
  if (strstr('aeiouAEIOU',$string[$i])) {
      $vowels++;
}
}

Обсуждение

Посимвольная обработка – это самый простой способ подсчета после довательности «Смотри и говори»:

function lookandsay($s) {
  // инициализируем возвращаемое значение пустой строкой
  $r = '';
  // переменная $m, которая содержит подсчитываемые символы,
  // инициализируется первым символом * в строке
  $m = $s[0];
// $n, количество обнаруженных символов $m, инициализируется значением 1
  $n = 1;
    for ($i = 1, $j = strlen($s); $i < $j; $i++) {
      // если символ совпадает с последним символом
        if ($s[$i] == $m) {
          // увеличиваем на единицу значение счетчика этих символов
          $n++;
          } else {
          // иначе добавляем значение счетчика и символа к возвращаемому значению
          $r .= $n.$m;
// устанавливаем искомый символ в значение текущего символа
          $m = $s[$i];
          // и сбрасываем счетчик в 1
        v$n = 1;
}
}
          // возвращаем построенную строку, а также последнее значение счетчика и символ
return $r.$n.$m;
}
for ($i = 0, $s = 1; $i < 10; $i++) {
      $s = lookandsay($s);
      print "$s\n";
}

1
11
21
1211
111221
312211
13112221
1113213211
31131211131221
13211311123113112211

Это называется последовательностью «Смотри и говори», поскольку каждый элемент мы получаем, глядя на предыдущие элементы и говоря, сколько их. Например, глядя на первый элемент, 1, мы говорим «один». Следовательно, второй элемент – «11», то есть две единицы, поэтому третий элемент – «21». Он представляет собой одну двойку и одну единицу, поэтому четвертый элемент – «1211» и т. д.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ