Как выполнить реверс строки в C++
Development | Комментировать запись
При разработке на C++ иногда возникает необходимость перевернуть строку. Это может быть как простой вывод перевернутой строки, так и постоянный реверс строки по её адресу.
Как решить обе эти задачи, вы узнаете в данном мануале. Здесь мы будем работать с разными стандартными и пользовательскими функциями.
Реверс строки – это операция, которая инвертирует порядок символов в строке. ПРедположим, что у нас есть переменная, которая содержит строку «JournalDev».
После реверса ‘str’ содержимое будет отображаться в обратном порядке. То есть, теперь ‘str’ будет содержать строку «veDlanruoJ».
Давайте посмотрим, какие существуют способы перевернуть строку в C++.
Функция reverse()
Встроенная функция reverse() выводит строку в обратном порядке. При этом в качестве аргументов выступают двунаправленные начальные и конечные итераторы.
Эта функция определена в алгоритме заголовочного файла. Приведенный ниже код показывает применение функции reverse():
#include <algorithm> #include<iostream> #include<string> using namespace std; int main() { string str = "Journal Dev reverse example"; reverse(str.begin(), str.end()); cout<<"\n"<<str; return 0; }
Вывод будет выглядеть так:
Функция strrev()
strrev() — это встроенная функция C++, определенная внутри заголовочного файла cstring.h. Этот метод широко применяют для реверса C-строк (массивов символов).
Эта функция принимает только базовый адрес строки как аргумента и переворачивает ее соответствующим образом. Давайте посмотрим на примере, как перевернуть строку с помощью функции strlen() в C++.
#include<iostream> #include<cstring> using namespace std; int main() { char str[] ="Journal Dev reverse example"; strrev(str); cout<<"\n"<<str; return 0; }
Вывод:
Приведенный выше код показывает работу функции strrev().
Вывод строки в обратном порядке
В отдельных случаях нам может понадобиться вывести строку в обратном порядке, а не изменять её. Например, это касается постоянных строк, которые в принципе нельзя изменить. Используя цикл, мы можем вывести любую строку в обратном порядке. Давайте посмотрим, как это делается.
#include<iostream> #include<string> using namespace std; int main() { string str="Journal Dev reverse example"; int i; cout<<"Printing string in reverse\n"; for(i = str.length() - 1; i >= 0; i--) { cout<<str[i]; } return 0; }
Вывод будет выглядеть так:
- В приведенном выше коде мы сначала инициализировали строку ‘str’.
- Обратите внимание, что внутри цикла for при выводе строки мы инициализировали итератор ‘i’ со значением str.length()-1. Это значит, что строку нужно вывести в обратном порядке, начиная с последнего индекса.
- Обратите внимание: length() возвращает длину строки. То есть, для вывода строки в обратном порядке мы должны учитывать последний индекс, который должен быть length()-1, так как в массиве символов индексация начинается с 0.
Создание пользовательской функции реверса строки
Ранее мы уже разобрали, как выводить строку в обратном порядке, а также реверсировать её с помощью встроенных функций.
Теперь для реверса строки мы создадим свою функцию по имени My_rev().
#include<iostream> #include<string> #include<cstring> using namespace std; char *My_rev(char *str) { int i,len=0,n; char temp; len=strlen(str); n=len-1; for(i = 0; i <=(len/2); i++) { temp=str[i]; str[i]=str[n]; str[n]=temp; n--; } return str; } int main() { char My_string[]="Journal Dev reverse example"; cout<<"Reverse string using My_rev()...\n"; My_rev(My_string); cout<<My_string; return 0; }
Мы получим такой результат:
- В приведенном коде My_rev() — это функция, которая реверсирует строку, при этом базовый адрес строки передается в качестве аргумента.
- Внутри функции My_rev(), *str — это указатель, в котором хранится базовый адрес строки. В нашем примере str указывает на первый элемент строки My_string.
- len хранит длину строки. Здесь n – это индекс последнего элемента.
- В данной функции мы пытаемся поменять местами отдельные символы строки. Это значит, что мы продолжаем менять местами элементы с 0-го и n-го индекса, пока не дойдём до (len/2)-й позиции. В приведенном примере цикл for делает эту замену за нас, то есть технически переворачивает строку.
- В конце мы возвращаем базовый адрес str в функцию main(), а строка выводится с помощью функции cout.
Читайте также: Как работает цикл foreach в C++
Tags: С++