Как перевернуть строку в 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. Для надёжности в продакшне используйте библиотеки, ориентированные на графемы, и добавляйте тесты на крайние случаи.
Короткие рекомендации: используйте самый читаемый метод для учебных задач, а для пользовательских данных — предпочитайте корректность обработки символов над «минимальным» кодом.
Похожие материалы
Gmail и настольные клиенты: выбор и настройка
SketchUp бесплатно: как начать 3D‑моделирование
Как создать аккаунт PlayStation Network (PSN)
Почему iPhone и iPad нагреваются и как это исправить
Как искать жильё на Airbnb для отпуска