1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lkn2015-phpcookbook_3rd_translate

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
chapter1_strings_1.4_单独处理字符串的每一个字节.md 3.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 11:36 0f1959f

Глава 1. Строки

1.4. Обработка каждого отдельного байта строки

Задача

Требуется извлечь каждый отдельный байт строки и выполнить над ним определённую обработку.

Решение

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

Пример 1-16

$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++;
    }
}

Этот пример подсчитывает количество гласных букв в строке.

Обсуждение

Обработка каждого отдельного байта строки может быть полезна при вычислении последовательности Лукаса-Лемера (Look and Say sequence). Пример 1-17 демонстрирует, как написать последовательность Лукаса-Лемера.

Пример 1-17

// Инициализация строки
$r = '';
// $m — это текущий символ, изначально первый символ строки
$m = $s[0];
// $n — это количество одинаковых символов, изначально 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
$n = 1;
}
}
// Возвращаем строку
return $r.$n.$m;}

for ($i = 0, $s = 1; $i < 10; $i++) {
$s = lookandsay($s);
print "$s\n";
}```

**Вывод примера 1-17:**

1
11
21
1211
111221
312211
13112221
1113213211
31131211131221
13211311123113112211

Последовательность, полученная в примере 1-17, называется **последовательностью Лукаса-Лемера**, потому что каждый элемент этой последовательности содержит описание количества повторений предыдущего элемента. Например, первый элемент равен 1, и мы говорим «один 1». Второй элемент равен 11, и мы говорим «две единицы». Третий элемент равен 21, и мы говорим «одна двойка и одна единица».

#### См. также

* [Руководство по использованию `for`](http://php.net/manual/zh/control-structures.for.php).
* [Последовательность Лукаса-Лемера](https://en.wikipedia.org/wiki/Look-and-say_sequence).

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/lkn2015-phpcookbook_3rd_translate.git
git@api.gitlife.ru:oschina-mirror/lkn2015-phpcookbook_3rd_translate.git
oschina-mirror
lkn2015-phpcookbook_3rd_translate
lkn2015-phpcookbook_3rd_translate
master