Поиск по сайту:

Обратная строка в C++


Во многих ситуациях нам может понадобиться перевернуть строку в программировании на C++. Это может включать в себя просто печать перевернутой строки. Или, может быть, в некоторых случаях нужно перевернуть строку навсегда по ее адресу.

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

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

Обращение строки относится к операции над строкой, при которой последовательность символов в ней инвертируется. Например, предположим, что «str» содержит строку «JournalDev».

После того, как операция реверсирования выполняется для строки «str», содержимое должно быть реверсировано. Следовательно, теперь «str» должна содержать строку «veDlanruoJ».

Теперь давайте посмотрим, как мы можем выполнить эту обратную операцию над строками C++, используя различные методы.

Использование функции reverse() в C++

Встроенная функция реверса reverse() в C++ напрямую переворачивает строку. Учитывая, что в качестве аргументов передаются как двунаправленные начальные, так и конечные итераторы.

Эта функция определена в заголовочном файле алгоритма. Приведенный ниже код описывает использование функции 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-строки (массива символов).

Кроме того, он требует только базовый адрес строки в качестве аргумента и соответствующим образом переворачивает строку. Давайте посмотрим, как мы можем использовать функцию strrev() в C++ для обращения строк.

#include<iostream>
#include<cstring>
using namespace std; 
int main() 
{ 
    char str[] ="Journal Dev reverse example"; 
    strrev(str);
	cout<<"\n"<<str; 
    return 0;
}

Выход:

Приведенный выше код очень хорошо иллюстрирует работу функции strrev(). Для строки «str» функция успешно обращает ее, как мы видим в самом выводе.

Печать строки в обратном порядке

В некоторых случаях нам может не понадобиться изменять строку, а только выводить ее в обратном порядке. Это может быть для постоянных строк, которые нельзя изменить. Мы можем напечатать любую строку в обратном порядке, используя цикл. Давайте посмотрим, как.

#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()

До сих пор мы узнали, как мы можем печатать строку в обратном порядке, а также переворачивать строку с помощью различных предопределенных функций. Теперь давайте создадим или определим нашу собственную функцию с именем 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.

Рекомендации

  • https://stackoverflow.com/questions/198199/how-do-you-reverse-a-string-in-place-in-c-or-c
  • /community/tutorials/string-length-in-c-plus-plus