Обратная перестановка слов или символов

Проблема

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

Решение

Для перестановки байтов воспользуйтесь функцией reverse в скалярном контексте:
$revbytes = reverse($string);
Для перестановки слов воспользуйтесь reverse в списковом контексте с функциями split и join:
$revwords = join(" ", reverse split(" ", $string));

Комментарий

У функции reverse существуют два варианта применения. В скалярном контексте функция объединяет аргументы и возвращает полученную строку в обратном порядке. В списковом контексте функция возвращает аргументы в обратном порядке. При использовании reverse для перестановки символов в неочевидной ситуации используйте функцию scalar для форсированного применения скалярного контекста.
$gnirts = reverse($string);       # Перестановка символов $string
@sdrow  = reverse(@words);        # Перестановка элементов @sdrow
@confused = reverse (@words);     # Перестановка букв в join("", @words)
Приведем пример обратной перестановки слов в строке. Пробел (" ") в качестве шаблона split является особым случаем. Он заставляет split использовать в качестве разделителя смежные пропуски (whitespace) и отбрасывать начальные пустые поля (по аналогии с awk). Обычно split отбрасывает только конечные пустые поля.
# Обратная перестановка слов
$string = 'Yoda said, "can you see this?"';
@allwords = split(" ", $string);
$revwords = join(" ", reverse @allwords);
print $revwords, "\n";
this?"  see you  "can  said,   Yoda
Временный массив @allwords можно убрать и сделать все в одной строке:
$revwords = join(" ", reverse split(" ", $string));
Смежные пропуски в $string превращаются в один пробел в $revwords. Чтобы сохранить существующие пропуски, поступите так:
$revwords = join("", reverse split (/(\s+)/, $string));
С помощью функции reverse можно проверить, является ли слово палиндромом (то есть читается ли одинаково в обоих направлениях):
$word = "reviver";
$is_palindrome = ($word eq reverse($word));

См. также

Описание функций split, reverse и scalar



2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: