Что такое код strrev


Функция strrchr

Пример

Функция strchr

Поиск символов

Функция strrev

Обращение строк

Пример

Функция strupr

Пример

Функция strlwr

Прототип функции strlwr:

char* strlwr (char *source)

Функция преобразует символы верхнего регистра в символы ниж­него регистра в строке source. Другие символы не затрагиваются. Функ­ция возвращает указатель на строку source.

char str[] = «HELLO THERE»;

Переменная str теперь содержит строку «hello there».

Прототип функции strupr:

char* strupr(char *source)

Функция преобразует символы нижнего регистра в символы верх­него регистра в строке source. Другие символы не затрагиваются. Функ­ция возвращает указатель на строку source.

char str[] = «Borland C++»;

Переменная str теперь содержит строку «BORLAND С ++».

Библиотека STRING.H предлагает функцию strrev для записи символов в строке в обратном порядке.

Прототип функции strrev:

char* strrev(char *str)


Функция обращает порядок символов в строке str и возвращает указатель на строку str. char str[] = «Hello»;

Будет выведено «olleH».

Рассмотрим программу, которая манипулирует символами в строке. List7_6.cpp показывает исходный текст программы STRING3.CPP. Программа выполняет следующие задачи:

· Запрашивает у вас ввод строки

· Отображает ваш ввод

· Выводит вашу строку в нижнем регистре

· Выводит вашу строку в верхнем регистре

· Отображает символы, которые вы ввели, в обратном порядке

· Выводит сообщение, что ваш ввод не содержит символов верхнего реги­стра, если это так

· Выводит сообщение, что ваш ввод не содержит символов в нижнем ре­гистре, если это так

· Выводит сообщение, что ваша строка симметрична, если это так

Библиотека STRING.H предлагает ряд функций для поиска символов в строках. Это функции strchr, strrchr, strspn, strcspn и strpbrk. Они осущест­вляют поиск в строках символов и простых символьных шаблонов.

Функция strchr определяет первое вхождение символа в строку.

Прототип функции strchr:

char* strchr(const char *target, int c)

Функция находит первое вхождение символа с в строку target. Функ­ция возвращает указатель на символ в строке target, который соответст­вует заданному образцу с. Если символ с в строке не обнаруживается, функция возвращает 0.

char str[81] = «Borland C++»;

Указатель strPtr теперь содержит адрес подстроки «++» в строке str.

Функция strrchr определяет последнее вхождение символа в строке.

Прототип функции strrchr:

char* strrchr(const char *target, int c)

Функция находит последнее вхождение символа с в строку target. Функция возвращает указатель на символ в строке target, который соответствует заданному образцу с. Если символ с в строке не обнару­живается, функция возвращает 0.


Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Учись учиться, не учась! 10391 — | 7893 — или читать все.

188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Что такое код strrev

monolit111, большое спасибо.
ухх. очень классно Вы придумали!! я бы еще долго не догадался до такого..

скажите, «+1» это для нулевого байта?

делаю другую лабу.. здание в строке найти кол-во слов, найти самое длинное и убрать все лишние пробелы (чтобы между словами был только один пробел.)

не могу убрать лишние пробелы. я уже пробовал отдельно в цикле искать два рядом пробела удалять и пересчитывать, но оно видит только первое слово, т.к. после него как бы символ конца строки.

Перевернуть строку на PHP

Самая популярная задача на собеседованиях это переворот строки без использования функции srtrev. Решил добавить свои 5 копеек, какой я вижу эту задачу.

Первое решение на знание других встроенных функций (никто ведь не запрещал использовать их).

Второе решение с использованием операции конкатенации выглядит еще проще.

И напоследок решение которым можно удивить своего работодателя, если он слабо понимает булеву алгебру.

How to reverse a Unicode string

It was hinted in a comment to an answer to this question that PHP can not reverse Unicode strings.

As for Unicode, it works in PHP because most apps process it as binary. Yes, PHP is 8-bit clean. Try the equivalent of this in PHP: perl -Mutf8 -e ‘print scalar reverse(«ほげほげ»)’ You will get garbage, not «げほげほ». – jrockway

And unfortunately it is correct that PHPs unicode support atm is at best «lacking». This will hopefully change drastically with PHP6.

PHPs MultiByte functions does provide the basic functionality you need to deal with unicode, but it is inconsistent and does lack a lot of functions. One of these is a function to reverse a string.

I of course wanted to reverse this text for no other reason then to figure out if it was possible. And I made a function to accomplish this enormous complex task of reversing this Unicode text, so you can relax a bit longer until PHP6.

Обратная строка без strrev

Некоторое время назад во время собеседования я получил задачу изменить строку на PHP без использования strrev .

Илон Маск рекомендует:  fread - Бинарно-безопасное чтение файла

Мое первое решение было примерно таким:


то они спросили меня, могу ли я сделать это без удвоения использования памяти (не используя переменную $temp или любую переменную, чтобы скопировать обратную строку), и я потерпел неудачу. Это продолжало прослушивать меня, и с тех пор я пытался решить это несколько раз, но я постоянно терпел неудачу.

Моя последняя попытка выглядит так:

Это не решение отбросить «abcdefg» после цикла, потому что тогда я бы удвоил объем используемой памяти. Мне нужно удалить последний символ на каждой итерации цикла.

Я попытался использовать mb_substr следующим образом:

но это только дает мне Uninitialized string offset ошибки Uninitialized string offset .

Вот где я застрял (снова). Я попытался выполнить поиск в Google, но все решения, которые я нашел, либо echo -символы, либо использовать временную переменную.

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

Это интересно. Вот что я только что придумал:

list() может использоваться для назначения списка переменных за одну операцию. Итак, что я делаю, это просто замена символов (начиная с первого и последнего, затем второго-первого и второго-последнего и т. Д., Пока он не достигнет середины строки)

Результат – mlkjihgfedcba . Не используйте какие-либо другие переменные, кроме $s и счетчиков, поэтому я надеюсь, что это соответствует вашим критериям.

Вы можете использовать тот факт, что в PHP строку можно рассматривать как массив символов .

Тогда в основном вы хотите заменить каждый символ $i слева от середины строки символом $j на правой стороне середины с тем же расстоянием.

Например, в строке из семи символов средний символ находится в позиции 3. Символ в позиции 0 (расстояние 3) должен быть заменен символом в положении 6 (3 + 3), символ в позиции 1 (расстояние 2 ) необходимо поменять местами с символом в позиции 5 (3 + 2) и т. д.

Этот алгоритм может быть реализован следующим образом:

Вы можете использовать трюк обмена XOR.

Строки PHP являются своего рода изменчивыми , но из-за копирования на запись очень сложно изменить их на месте без создания копии . Некоторые из вышеперечисленных решений работают, но только потому, что они автономны; некоторые из них уже сбой, потому что они определяют функцию без аргумента pass-by-reference. Чтобы заставить код фактически работать на месте в более крупной программе, вам нужно будет уделять пристальное внимание назначениям, аргументам функций и областям.

Я полагаю, что если между инициализацией переменной и ее модификацией вы только когда-либо использовали присвоения ссылок ( &= ) и ссылочные аргументы ( function rev(&$string) ) ( или сначала назначьте строку свойству объекта, а затем никогда не присваиваете это любой другой переменной ), вы можете изменить исходное значение строки без каких-либо копий. Однако это немного смешно, и я предполагаю, что интервьюер, который придумал этот вопрос, не знал о копировании на запись.

Между прочим, это не совсем то же самое, что и неизменяемость на других языках, поскольку это относится и к массивам:

Подводя итог, все типы ( кроме объектов с PHP5) назначаются с копированием на запись, если вы специально не используете оператор &= . Назначение не копирует их, но в отличие от большинства других языков (C, Java, Python …), которые либо изменяют исходное значение (массивы), либо вообще не разрешают доступ на запись (строки), PHP будет тихо создавать перед внесением любых изменений.

Конечно, если вы переключились на язык с более обычными указателями, а также переключились на байтовые массивы вместо строк, вы могли бы использовать XOR для замены каждой пары символов на месте:

Вот это версия PHP7:

В основном @EricBouwers отвечают, но вы можете удалить вторую переменную-заполнителя $j


Тест для выхода:

Это пройдет через список и остановится на полпути, оно поменяет крайнее левое и самое правое, и будет работать внутри, и останавливается посередине. Если нечетное числовое значение, сводная цифра никогда не меняется местами, а если даже, она меняет местами средние два и останавливается. Единственная дополнительная память – $len для удобства и $tmp для обмена.

Если вам нужна функция, которая не возвращает новую копию строки, а просто редактирует старую, вы можете использовать следующее:

Использование &$str передает прямой указатель на строку для редактирования на месте.

И для более простой реализации, такой как @treegardens, вы можете переписать как:

У этого есть аналогичная логика, но я упростил for-loop совсем немного.

Вот мой код для решения вашей проблемы

Вы также можете использовать рекурсию для изменения строки. Что-то вроде этого, например:

То, что вы здесь делаете, фактически возвращает последний символ строки, а затем снова вызывает ту же функцию с подстрокой, которая содержит начальную строку без последнего символа. Когда вы достигнете точки, когда ваша строка – всего один символ, вы заканчиваете рекурсию.

Вы можете использовать этот код для изменения строки без использования зарезервированной функции в php.

Код:

В приведенном выше коде мы передали значение строки в качестве параметра. Мы выполнили инверсию строки, используя для цикла.

вы можете использовать substr с отрицательным началом.

Теория и пояснения

вы можете начать с цикла loop с счетчиком от 1 до длины строки и вызвать substr внутри итерации с помощью counter * -1 ( который преобразует счетчик в отрицательное значение ) и длиной 1 .

Илон Маск рекомендует:  RecodeTime - Функция Delphi

Таким образом, первый счетчик будет равен 1 и умножив его на -1 , превратит его в -1

Следовательно, substr(‘abcdefg’, -1, 1); вы получите g
и следующей итерации substr(‘abcdefg’, -2, 1); вы получите f
и substr(‘abcdefg’, -3, 1); вы получите e
и так далее …

Следующее решение очень простое, но оно делает работу:

var_dump($reversedString) то результаты: string(7) «saerdnA»

вы можете попробовать это ..

Я использовал некоторую встроенную функцию, но без функции str_rev.

StrRev () Поддержка UTF доцент-8

Я пытаюсь сделать код , который заменяет арабский текст , который будет поддерживаться в не арабском поддерживают программы
в том , что я буду необходимо отменить текст после замены , но его показывают некоторый мусор материала вместо желаемого результата


Мне нужно, чтобы это было так, как это, но обратное? не МУСОР !!

для того , чтобы сделать эту strrev() поддержку UTF-8 вам нужно использовать этот Function

поэтому мы будем Ставить strrev () в нашем коде utf8_strev ():

Я использую этот

Более общее и прямое решение будет:

Это решение поддерживает все кодировки, а не только utf8.

Что такое использование возвращаемого значения в strrev ()?

Что такое использование возвращаемого значения strrev() ? Даже после того, как реверсивная строку, то значение будет изменено в данной строке.

Пример: char *strrev(char *src); Вот после того, как строка перевернута, то выход будет присутствовать в ГКЗ. В таком случае , что является использование возвращения строки?

Либо возвращаемое значение или строка , которую мы передаем также действует как вывод, что достаточно. В таком случае , что является использование возвращаемого значения strrev() ?

Для обеспечения сцепления.

Представьте, что вы хотели изменить строку, а затем отменить его обратно (надуманный пример, но он делает точку). С цепочкой, вы можете сделать это:

Если sttrev возвращено void , вы должны сделать:

чтобы получить тот же результат.

Как говорит @WernerHenze в своем комментарии, он также позволяет работать непосредственно с выходом в вызовах функций, как это:

Возможность сцепления в основном дает большую гибкость для программиста о том, как структурирован код.

Сцепление имеет больше смысла, но он также может быть использован в маловероятном микро-оптимизации. Вы можете избежать сохранения временного значения в стеке во время разговора. Например.:

За звонки strrev() и strlwr() вы должны держать безопасную копию s для последующего использования. Вы можете устранить этот регистр сэкономить , используя:

В соответствии с цепным ответ, вы также можете использовать:

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

Я просто попытался его , и он устранен три mov инструкции. Ура!!

Что такое использование возвращаемого значения в strrev ()?


December 2020

488 раз

Что такое использование возвращаемого значения strrev() ? Даже после того, как реверсивная строку, то значение будет изменено в данной строке.

Пример: char *strrev(char *src); Вот после того, как строка перевернута, то выход будет присутствовать в ГКЗ. В таком случае , что является использование возвращения строки?

Либо возвращаемое значение или строка , которую мы передаем также действует как вывод, что достаточно. В таком случае , что является использование возвращаемого значения strrev() ?

2 ответы

Сцепление имеет больше смысла, но он также может быть использован в маловероятном микро-оптимизации. Вы можете избежать сохранения временного значения в стеке во время разговора. Например.:

За звонки strrev() и strlwr() вы должны держать безопасную копию s для последующего использования. Вы можете устранить этот регистр сэкономить , используя:

В соответствии с цепным ответ, вы также можете использовать:

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

Я просто попытался его , и он устранен три mov инструкции. Ура!!

Для обеспечения сцепления.

Представьте, что вы хотели изменить строку, а затем отменить его обратно (надуманный пример, но он делает точку). С цепочкой, вы можете сделать это:

Если sttrev возвращено void , вы должны сделать:

чтобы получить тот же результат.

Как говорит @WernerHenze в своем комментарии, он также позволяет работать непосредственно с выходом в вызовах функций, как это:

Возможность сцепления в основном дает большую гибкость для программиста о том, как структурирован код.

Обратная строка без strrev

Некоторое время назад во время собеседования я получил задачу изменить строку на PHP без использования strrev .

Мое первое решение было примерно таким:

то они спросили меня, могу ли я сделать это без удвоения использования памяти (не используя переменную $temp или любую переменную, чтобы скопировать обратную строку), и я потерпел неудачу. Это продолжало прослушивать меня, и с тех пор я пытался решить это несколько раз, но я постоянно терпел неудачу.

Моя последняя попытка выглядит так:

Это не решение отбросить «abcdefg» после цикла, потому что тогда я бы удвоил объем используемой памяти. Мне нужно удалить последний символ на каждой итерации цикла.


Я попытался использовать mb_substr следующим образом:

но это только дает мне Uninitialized string offset ошибки Uninitialized string offset .

Вот где я застрял (снова). Я попытался выполнить поиск в Google, но все решения, которые я нашел, либо echo -символы, либо использовать временную переменную.

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

Это интересно. Вот что я только что придумал:

list() может использоваться для назначения списка переменных за одну операцию. Итак, что я делаю, это просто замена символов (начиная с первого и последнего, затем второго-первого и второго-последнего и т. Д., Пока он не достигнет середины строки)

Илон Маск рекомендует:  Стандарты названий css классов и id

Результат – mlkjihgfedcba . Не используйте какие-либо другие переменные, кроме $s и счетчиков, поэтому я надеюсь, что это соответствует вашим критериям.

Вы можете использовать тот факт, что в PHP строку можно рассматривать как массив символов .

Тогда в основном вы хотите заменить каждый символ $i слева от середины строки символом $j на правой стороне середины с тем же расстоянием.

Например, в строке из семи символов средний символ находится в позиции 3. Символ в позиции 0 (расстояние 3) должен быть заменен символом в положении 6 (3 + 3), символ в позиции 1 (расстояние 2 ) необходимо поменять местами с символом в позиции 5 (3 + 2) и т. д.

Этот алгоритм может быть реализован следующим образом:

Вы можете использовать трюк обмена XOR.

Строки PHP являются своего рода изменчивыми , но из-за копирования на запись очень сложно изменить их на месте без создания копии . Некоторые из вышеперечисленных решений работают, но только потому, что они автономны; некоторые из них уже сбой, потому что они определяют функцию без аргумента pass-by-reference. Чтобы заставить код фактически работать на месте в более крупной программе, вам нужно будет уделять пристальное внимание назначениям, аргументам функций и областям.

Я полагаю, что если между инициализацией переменной и ее модификацией вы только когда-либо использовали присвоения ссылок ( &= ) и ссылочные аргументы ( function rev(&$string) ) ( или сначала назначьте строку свойству объекта, а затем никогда не присваиваете это любой другой переменной ), вы можете изменить исходное значение строки без каких-либо копий. Однако это немного смешно, и я предполагаю, что интервьюер, который придумал этот вопрос, не знал о копировании на запись.

Между прочим, это не совсем то же самое, что и неизменяемость на других языках, поскольку это относится и к массивам:

Подводя итог, все типы ( кроме объектов с PHP5) назначаются с копированием на запись, если вы специально не используете оператор &= . Назначение не копирует их, но в отличие от большинства других языков (C, Java, Python …), которые либо изменяют исходное значение (массивы), либо вообще не разрешают доступ на запись (строки), PHP будет тихо создавать перед внесением любых изменений.

Конечно, если вы переключились на язык с более обычными указателями, а также переключились на байтовые массивы вместо строк, вы могли бы использовать XOR для замены каждой пары символов на месте:

Вот это версия PHP7:

В основном @EricBouwers отвечают, но вы можете удалить вторую переменную-заполнителя $j

Тест для выхода:

Это пройдет через список и остановится на полпути, оно поменяет крайнее левое и самое правое, и будет работать внутри, и останавливается посередине. Если нечетное числовое значение, сводная цифра никогда не меняется местами, а если даже, она меняет местами средние два и останавливается. Единственная дополнительная память – $len для удобства и $tmp для обмена.

Если вам нужна функция, которая не возвращает новую копию строки, а просто редактирует старую, вы можете использовать следующее:


Использование &$str передает прямой указатель на строку для редактирования на месте.

И для более простой реализации, такой как @treegardens, вы можете переписать как:

У этого есть аналогичная логика, но я упростил for-loop совсем немного.

Вот мой код для решения вашей проблемы

Вы также можете использовать рекурсию для изменения строки. Что-то вроде этого, например:

То, что вы здесь делаете, фактически возвращает последний символ строки, а затем снова вызывает ту же функцию с подстрокой, которая содержит начальную строку без последнего символа. Когда вы достигнете точки, когда ваша строка – всего один символ, вы заканчиваете рекурсию.

Вы можете использовать этот код для изменения строки без использования зарезервированной функции в php.

Код:

В приведенном выше коде мы передали значение строки в качестве параметра. Мы выполнили инверсию строки, используя для цикла.

вы можете использовать substr с отрицательным началом.

Теория и пояснения

вы можете начать с цикла loop с счетчиком от 1 до длины строки и вызвать substr внутри итерации с помощью counter * -1 ( который преобразует счетчик в отрицательное значение ) и длиной 1 .

Таким образом, первый счетчик будет равен 1 и умножив его на -1 , превратит его в -1

Следовательно, substr(‘abcdefg’, -1, 1); вы получите g
и следующей итерации substr(‘abcdefg’, -2, 1); вы получите f
и substr(‘abcdefg’, -3, 1); вы получите e
и так далее …

Следующее решение очень простое, но оно делает работу:

var_dump($reversedString) то результаты: string(7) «saerdnA»

вы можете попробовать это ..

Я использовал некоторую встроенную функцию, но без функции str_rev.

Что такое код strrev

monolit111, большое спасибо.
ухх. очень классно Вы придумали!! я бы еще долго не догадался до такого..

скажите, «+1» это для нулевого байта?

делаю другую лабу.. здание в строке найти кол-во слов, найти самое длинное и убрать все лишние пробелы (чтобы между словами был только один пробел.)

не могу убрать лишние пробелы. я уже пробовал отдельно в цикле искать два рядом пробела удалять и пересчитывать, но оно видит только первое слово, т.к. после него как бы символ конца строки.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL