В PHP это strrev()
, в Rails это .reverse
, но большинство языков не имеют функции обратного преобразования строк. Некоторые из них имеют функции обратного массива, которые можно использовать для символов. Я думал, что это должно быть серьезным упущением, но потом мне пришло в голову, что бы вы на самом деле использовали реверс строки ???
Единственный раз, когда я думаю, что видел это в демонстрациях и уроках, чтобы включить «Hello World!» в "! dlroW olleH".
Мой вопрос Есть ли смысл переворачивать строку или это совершенно бессмысленно?
,
добавление
Было гораздо больше ответов, которые я ожидал, и не все они были полностью академическими. Я бы вложил деньги, чтобы никто не смог придумать законный пример. Я также не думал, что узнаю что-то новое, но предложение Регламента Марка Канласа просто блестяще, и я с нетерпением жду возможности, чтобы он проявил себя. Спасибо всем.
источник
a ^= b; b ^= a; a ^= b;
Ответы:
Sexegers
Иногда проблемы, связанные с регулярными выражениями, легче записать, если перевернуть входную строку и решить проблему другим способом.
Техника вежливости человека, который научил меня Perl.
Sexeger на PerlMonks
источник
Ну, это насмешливый ответ.
«Назад в прошлое» У меня была коробка Unix, и в ней был упорядоченный файл словаря английских слов, используемый для проверки орфографии.
Я создал новый файл, перевернув все слова в словаре, отсортировав их, а затем снова перевернув их. Результатом стал список слов, отсортированный справа налево.
Так что, если вы искали его по слову, рядом с этим словом будут слова с похожими окончаниями. Так было легко делать маленькие стихи!
Вы можете по-настоящему развлечься, когда увидите, что рифмуется с чем.
источник
Я был программистом / разработчиком / системным администратором в течение ~ 10 лет, и я не могу вспомнить, чтобы мне когда-либо приходилось менять строки в реальных жизненных ситуациях.
Единственный непосредственный вариант использования, о котором я могу подумать, - это преобразование на основе чисел: выполненное наивно, процедура возвращает обратную строку. Однако, потратив немного математики, вы можете заранее рассчитать необходимое количество места, чтобы вы могли начинать заполнять буфер с конца.
источник
memmove
до начала, когда закончите. Вероятно, это дешевле, чем вычисление log (n) / log (base) для вычисления необходимого количества цифр.источник
0
кn/2
и сравнить характер на противоположном конце.while ( (*p == *q) && (p <= q) {p++; q--} return p > q;
на C и других языках указателя.Интервью!
Обратная строка (на месте или нет) - очень распространенный вопрос для получения базовых знаний по программированию. Язык, на котором отсутствуют эти встроенные функции, будет сложно взять на собеседование. Кандидат на самом деле должен что-то знать. 1
1: Это насмешливый ответ.
источник
Я видел ситуации, когда настольное приложение общалось со встроенными устройствами и постоянно переключало порядок байтов, а данные перемещались в виде строк. Это об этом для меня, хотя.
Я бы не использовал строки для этого приложения, но так оно и было .....
источник
Не лучшее решение для запутывания адреса электронной почты, так как при добавлении его в буфер обмена он все равно переворачивается. И, если он станет популярным, его скоро обнаружат роботы-скребки по электронной почте.
Тем не менее, это было предложено .
источник
ASCII не лучшая кодировка для генетической информации (вы можете упаковать базовые типы ACGT как 2-битные). Упакуйте их в массив длинных, и вы получите 32 генетических "буквы" за слово. ДНК можно перевернуть, так что вы должны проверить кусок ДНК на предмет того, что обе передние являются обратными копиями тестовой последовательности. Таким образом, возможность инвертировать упакованную строку из 2-битных величин может быть очень полезна для различных видов генетического анализа.
В качестве эталона для шпионских агентств у меня был вопрос, как быстро вы можете поменять биты на длинные-длинные (на самом деле очень длинный набор длинных-длинных). Очевидный метод обмена 2 бит за раз намного медленнее, чем менее очевидные методы. Они связаны с некоторыми из аккуратных алгоритмов для транспонирования массива на месте.
Тангурена: Операция, на которую вы ссылаетесь, называется подсчетом населения. Аналогичные пожелания для битовых данных являются ведущими и конечными нулями. Есть много действительно хороших вещей, которые можно сделать с битовыми данными. Одна длинная операция - это параллельная передача данных на 64 пути, поэтому, если вы знаете, что делаете, вы можете получить невероятную производительность для некоторых типов вычислений.
источник
Все, где работать с обращенной строкой легче.
Работать с целыми числами в виде строк намного проще, если строки переворачиваются. Я построил некоторые библиотечные функции для выполнения математических операций с большими целыми числами и использовал обращение строк, чтобы упростить арифметические функции.
Конечно, я использовал его только для получения ответов на Project Euler, но, тем не менее, первоначальная предпосылка верна.
источник
Возможно, недорогая многоязычная поддержка для языков, которые используют буквы справа налево (например, арабский), а не слева направо. Конечно, вы должны остерегаться символов акцента, изменяющих правильный символ ...
источник
Я не знаю, может быть, у кого-то есть жгучая необходимость проверить палиндром ....
Я не думаю, что это совершенно бесполезно, так как могут быть ситуации, когда нужно иметь возможность перевернуть строку.
источник
При обработке и анализе естественного языка иногда проще искать строку от конца до начала. Обратная строка была бы полезна для отладки или в качестве альтернативного способа написания цикла (переверните строку, а затем выполните цикл от индекса 0 до n-1).
Также некоторые языки пишутся справа налево, поэтому для этого можно использовать преобразователь строк, если вы находитесь в среде, которая изначально не распознает языки LTR / RTL.
Строка (в некоторых языках) - это массив символов, но это могут быть также чеки или модификации инвентаря. В цикле, проходящем через них, вы можете выполнять некоторые вычисления, которые должны быть одинаковыми, независимо от того, в каком порядке вы их обрабатываете. Совершенно громоздким модульным тестом было бы проверить, применяют ли они те же вычисления в прямом или обратном направлении. Это может быть тривиально очевидно для добавления, а может и не для других более непрозрачных операций.
источник
Для компиляторов?
Это забавно, но большинство символов в языке начинаются с общего шаблона. Я не говорю здесь о венгерской нотации, но если вы подумаете о пространстве имен / классах, то многие символы на самом деле будут иметь общий префикс .
Проблема в том, что при выполнении бинарного поиска обычные префиксы - это наихудшая вещь, с которой вы можете столкнуться, потому что вам придется сравнивать эти префиксы снова и снова.
С другой стороны, если вы посмотрите на струны задом наперед, вы увидите гораздо больше энтропии! И тогда внезапно бинарный поиск (через Trie) становится намного более мощным!
Меня всегда беспокоило, что искаженные имена C ++ (от gcc) не были изменены, чтобы поместить пространство имен LAST :)
источник
Я переворачиваю телефонные номера и определенные строки для поиска время от времени
источник
Единственный раз, когда я могу вспомнить, что использовалась перестановка строк, была функция, которую я видел в далеком прошлом, которая использовала ее при разборе имен файлов, чтобы гарантировать, что '.' он нашел в имени файла фактически последнюю точку, которая отделяла имя файла от расширения. то есть, анализируя имя файла, например
data.2010.12.08.dat
, вы бы перевернули строку, нашли первую точку, вычлили эту позицию из конца исходной строки и взяли подстроку. Я не говорю, что это оптимальный способ сделать это, но это то, что он сделал. Возможно, это было в Powerbuilder, где такое странное использование функций было обычным для обхода различных неочевидных проблем.источник
Единственное реальное приложение для работы с червями, которое я видел при использовании strrev, - это сохранение в базе данных паролей пользователей, которые «не читаются» ...
Но я помню, что в C есть шаблон для использования strrev, может быть, я придумаю его позже.
источник