Как выполнить реверс строки в C++

При разработке на 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:

Добавить комментарий