Гид по технологиям

Как перевернуть строку в C++, Python и JavaScript

4 min read Программирование Обновлено 17 Apr 2026
Перевернуть строку: C++, Python, JavaScript
Перевернуть строку: C++, Python, JavaScript

Иллюстрация: разные способы переворачивания строк в C++, Python и JavaScript

Коротко о задаче

Перевернуть строку — стандартная учебная задача для практики работы с массивами, индексами и методами языка. Цель проста: получить новую последовательность символов в обратном порядке. Для большинства алгоритмов асимптотика по времени O(n), где n — длина строки.

Разные методы в C++

Ниже показаны распространённые варианты для C++.

Перевернуть строку в C++ с помощью встроенной функции reverse()

Ниже — программа на C++, использующая встроенную функцию reverse():

// C++ implementation to reverse a string  
// using inbuilt function: reverse()  
#include   
using namespace std;  
  
// Driver Code  
int main()  
{  
 string str1 = "MUO";  
 string str2 = "Welcome to MUO";  
 string str3 = "She sells seashells by the seashore";  
  
 cout << "Input string:" << endl;  
 cout << str1 << endl;  
 cout << str2 << endl;  
 cout << str3 << endl;  
  
 reverse(str1.begin(), str1.end());  
 reverse(str2.begin(), str2.end());  
 reverse(str3.begin(), str3.end());  
  
 cout << "Reversed string: " << endl;  
 cout << str1 << endl;  
 cout << str2 << endl;  
 cout << str3 << endl;  
  
return 0;  
}

Вывод программы показывает перевёрнутые строки.

Перевернуть строку в C++ обменом символов

Пример собственной реализации через попарную замену символов:

// C++ implementation to reverse a string  
// by swapping characters  
#include   
using namespace std;  
  
// Own implementation of a function to reverse a string  
void reverseString(string& str)  
{  
 int size = str.size();  
  
 for(int i=0, j=size-1; i

Этот способ экономит дополнительную память (меняется строка на месте).

Перевернуть строку в C++ с помощью обратных итераторов и конструктора

Пример использования rbegin()/rend():

// C++ implementation to reverse a string  
// using constructor  
#include   
using namespace std;  
  
int main()  
{  
 string str1 = "MUO";  
 string str2 = "Welcome to MUO";  
 string str3 = "She sells seashells by the seashore";  
   
 cout << "Input string:" << endl;  
 cout << str1 << endl;  
 cout << str2 << endl;  
 cout << str3 << endl;  
  
 // Using reverse iterators to reverse a string  
 string reversedStr1 = string(str1.rbegin(), str1.rend());  
 string reversedStr2 = string(str2.rbegin(), str2.rend());  
 string reversedStr3 = string(str3.rbegin(), str3.rend());  
  
 cout << "Reversed string: " << endl;  
 cout << reversedStr1 << endl;  
 cout << reversedStr2 << endl;  
 cout << reversedStr3 << endl;  
  
return 0;  
}

Перевернуть строку в C++ с помощью временной строки

Создать новую строку и заполнить её символами от конца к началу:

// C++ implementation to reverse a string  
// using a temporary string  
#include   
using namespace std;  
  
// Function to reverse a string using a temporary string  
string reverseString(string str)  
{  
 int size = str.size();  
 string tempStr;  
 for(int i=size-1; i>=0; i--)  
 {  
 tempStr.push_back(str[i]);  
 }  
 return tempStr;  
}  
  
// Driver Code  
int main()  
{  
 string str1 = "MUO";  
 string str2 = "Welcome to MUO";  
 string str3 = "She sells seashells by the seashore";  
  
 cout << "Input string:" << endl;  
 cout << str1 << endl;  
 cout << str2 << endl;  
 cout << str3 << endl;  
  
 str1 = reverseString(str1);  
 str2 = reverseString(str2);  
 str3 = reverseString(str3);  
  
 cout << "Reversed string: " << endl;  
 cout << str1 << endl;  
 cout << str2 << endl;  
 cout << str3 << endl;  
   
 return 0;  
}

См. также: Как найти гласные, согласные, цифры и специальные символы в строке.

Разные методы в Python

Python предлагает компактные способы переворота строки.

Перевернуть строку в Python с помощью синтаксиса среза

# Python implementation to reverse a string  
# using extended slice syntax  
def reverseString(str):  
    return str[::-1]  
  
str1 = "MUO";  
str2 = "Welcome to MUO";  
str3 = "She sells seashells by the seashore";  
  
print("Input string:")  
print(str1)  
print(str2)  
print(str3)  
  
str1 = reverseString(str1)  
str2 = reverseString(str2)  
str3 = reverseString(str3)  
  
print("Reversed string:")  
print(str1)  
print(str2)  
print(str3)  

Перевернуть строку в Python рекурсией

# Python implementation to reverse a string  
# using recursion  
def reverseString(str):  
    if len(str) == 0:  
        return str  
    else:  
        return reverseString(str[1:]) + str[0]  
  
str1 = "MUO";  
str2 = "Welcome to MUO";  
str3 = "She sells seashells by the seashore";  
  
print("Input string:")  
print(str1)  
print(str2)  
print(str3)  
  
str1 = reverseString(str1)  
str2 = reverseString(str2)  
str3 = reverseString(str3)  
  
print("Reversed string:")  
print(str1)  
print(str2)  
print(str3)  

Рекурсия на больших строках может привести к переполнению стека; учтите это.

Перевернуть строку в Python с помощью встроенной функции reversed()

# Python implementation to reverse a string  
# using reversed method()  
def reverseString(str):  
    str = "".join(reversed(str))  
    return str  
  
str1 = "MUO";  
str2 = "Welcome to MUO";  
str3 = "She sells seashells by the seashore";  
  
print("Input string:")  
print(str1)  
print(str2)  
print(str3)  
  
str1 = reverseString(str1)  
str2 = reverseString(str2)  
str3 = reverseString(str3)  
  
print("Reversed string:")  
print(str1)  
print(str2)  
print(str3)  

Перевернуть строку в Python с временной строкой

# Python implementation to reverse a string  
# using a temporary string  
def reverseString(str):  
    tempStr = ""  
    for s in str:  
        tempStr = s + tempStr  
    return tempStr  
  
str1 = "MUO";  
str2 = "Welcome to MUO";  
str3 = "She sells seashells by the seashore";  
  
print("Input string:")  
print(str1)  
print(str2)  
print(str3)  
  
str1 = reverseString(str1)  
str2 = reverseString(str2)  
str3 = reverseString(str3)  
  
print("Reversed string:")  
print(str1)  
print(str2)  
print(str3)  

Разные методы в JavaScript

В JavaScript тоже есть несколько удобных подходов.

Перевернуть строку в JavaScript рекурсией

// JavScript implementation to reverse a string  
// using recursion  
function reverseString(str) {  
 if (str === "") {  
 return "";  
 } else {  
 return reverseString(str.substr(1)) + str.charAt(0);  
 }  
}  
  
str1 = "MUO";  
str2 = "Welcome to MUO";  
str3 = "She sells seashells by the seashore";  
  
document.write("Input string:   \n");  
document.write(str1 + " \n");  
document.write(str2 + " \n");  
document.write(str3 + " \n");  
  
str1 = reverseString(str1);  
str2 = reverseString(str2);  
str3 = reverseString(str3);  
  
document.write("Reversed string:   \n");  
document.write(str1 + " \n");  
document.write(str2 + " \n");  
document.write(str3 + " \n");

Перевернуть строку в JavaScript с помощью встроенных методов

// JavaScript implementation to reverse a string  
// using inbuilt methods  
function reverseString(str) {  
 return str.split("").reverse().join("");  
}  
  
str1 = "MUO";  
str2 = "Welcome to MUO";  
str3 = "She sells seashells by the seashore";  
  
document.write("Input string:   \n");  
document.write(str1 + " \n");  
document.write(str2 + " \n");  
document.write(str3 + " \n");  
  
str1 = reverseString(str1);  
str2 = reverseString(str2);  
str3 = reverseString(str3);  
  
document.write("Reversed string:   \n");  
document.write(str1 + " \n");  
document.write(str2 + " \n");  
document.write(str3 + " \n");

Перевернуть строку в JavaScript с временной строкой

// JavScript implementation to reverse a string  
// using a temporary string  
function reverseString(str) {  
 var size = str.length;  
 tempStr = "";  
 for(let i=size-1; i>=0; i--)  
 {  
 tempStr += str[i];  
 }  
 return tempStr;  
}  
  
str1 = "MUO";  
str2 = "Welcome to MUO";  
str3 = "She sells seashells by the seashore";  
  
document.write("Input string:   \n");  
document.write(str1 + " \n");  
document.write(str2 + " \n");  
document.write(str3 + " \n");  
  
str1 = reverseString(str1);  
str2 = reverseString(str2);  
str3 = reverseString(str3);  
  
document.write("Reversed string:   \n");  
document.write(str1 + " \n");  
document.write(str2 + " \n");  
document.write(str3 + " \n");

Когда эти методы не подходят — проблемы и крайние случаи

  • Unicode и комбинирующие символы: многие реализации оперируют кодовыми единицами (bytes/UTF-16 code units). Это может ломать эмодзи, буквы с диакритикой и составные символы. Для корректного обращения используйте библиотеку, работающую с графемными кластерами (grapheme clusters) или явную нормализацию.
  • Языковые особенности: в некоторых языках порядок символов или ZWJ/ZWJ-последовательности важны; простая инверсия может дать некорректный результат.
  • Память и ограничения стека: рекурсия на больших строках может привести к переполнению стека; временные строки увеличивают потребление памяти.

Рекомендации и альтернативные подходы

  • Для простых ASCII-строк подойдёт reverse(), .reverse() в JS или срез в Python — быстро и просто.
  • Для критичных по корректности случаев (Unicode, многобайтовые символы) используйте специализированные библиотеки (ICU, grapheme-splitter для JS, библиотека “regex” с поддержкой Unicode для Python) и нормализуйте строки перед операцией.
  • Если важна экономия памяти — меняйте строку на месте (при поддержке изменяемых строк) или работайте с буфером/массивом символов.

Ментальные модели и простая методика

  • Подумайте: работает ли ваш метод с единицами, которые вы считаете «символом»? Если нет — нужен другой подход.
  • Вопросы для выбора метода: размер строки, поддержка Unicode, требования к памяти, читаемость кода.

Критерии приёмки

  • Функция возвращает строку обратного порядка для ASCII-тестов.
  • Для Unicode-кейсов (эмодзи, комбинирующие знаки) поведение описано в документации функции или предусмотрено тестами.
  • Нет утечек памяти, нет переполнения стека на ожидаемых входных данных.

Минимальный набор тестов (acceptance)

  • Пустая строка.
  • Одна буква.
  • Строка с пробелами и пунктуацией.
  • Строка с эмодзи и комбинирующими символами.
  • Очень длинная строка (проверка на производительность/стек).

Краткий глоссарий

  • Графемный кластер: единица отображения символа (включает базовый символ + комбинирующие знаки).
  • Кодовая единица UTF-16/UTF-8: низкоуровневая единица хранения, не всегда соответствует видимому символу.

Итог

Переворот строки — простая операция на учебном уровне, но в реальных задачах важно учитывать Unicode и требования к памяти. Для большинства задач достаточно встроенных средств: std::reverse, s[::-1] в Python, split/reverse/join в JavaScript. Для надёжности в продакшне используйте библиотеки, ориентированные на графемы, и добавляйте тесты на крайние случаи.

Короткие рекомендации: используйте самый читаемый метод для учебных задач, а для пользовательских данных — предпочитайте корректность обработки символов над «минимальным» кодом.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Gmail и настольные клиенты: выбор и настройка
Почта

Gmail и настольные клиенты: выбор и настройка

SketchUp бесплатно: как начать 3D‑моделирование
3D моделирование

SketchUp бесплатно: как начать 3D‑моделирование

Как создать аккаунт PlayStation Network (PSN)
Руководство

Как создать аккаунт PlayStation Network (PSN)

Почему iPhone и iPad нагреваются и как это исправить
Мобильные устройства

Почему iPhone и iPad нагреваются и как это исправить

Как искать жильё на Airbnb для отпуска
Путешествия

Как искать жильё на Airbnb для отпуска

Arduino Pong: ретро-игра на TV
Arduino

Arduino Pong: ретро-игра на TV