Đảo ngược chuỗi bằng cách hoán đổi ký tự đầu-cuối tiến dần về giữa.
C - In-place reversal (Với char array)
#include <stdio.h>
#include <string.h>
void reverseString(char* str) {
if (!str) return;
size_t len = strlen(str);
for (size_t i = 0, j = len - 1; i < j; ++i, --j) {
char tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
}
int main() {
char s[100];
printf("Nhập chuỗi: ");
fgets(s, sizeof(s), stdin);
// Loại bỏ newline từ fgets
s[strcspn(s, "\n")] = '\0';
reverseString(s);
printf("Chuỗi đảo: %s\n", s);
return 0;
}
Kết quả
Nhập chuỗi: Hello World Chuỗi đảo: dlroW olleH
C++ - std::string (Dễ dàng, an toàn)
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string s = "Hello World";
// Cách 1: std::reverse (Khuyến nghị)
std::reverse(s.begin(), s.end());
std::cout << "Reversed: " << s << '\n';
// Cách 2: Constructor từ reverse iterator
std::string rev(s.rbegin(), s.rend());
std::cout << "New string: " << rev << '\n';
// Cách 3: Manual loop
for (size_t i = 0, j = s.size() - 1; i < j; ++i, --j) {
std::swap(s[i], s[j]);
}
return 0;
}
Kết quả
Reversed: dlroW olleH New string: dlroW olleH
C++ - Unicode/UTF-8 (Phức tạp hơn)
#include <iostream>
#include <string>
#include <vector>
// Đảo ngược grapheme cluster (Unicode đúng) cần ICU hoặc thư viện chuyên dụng
// Ví dụ đơn giản với UTF-8 code points:
std::string reverseUtf8(const std::string& input) {
std::vector codepoints;
for (size_t i = 0; i < input.size(); ) {
unsigned char c = input[i];
size_t len = (c < 0x80) ? 1 : (c < 0xE0) ? 2 : (c < 0xF0) ? 3 : 4;
codepoints.emplace_back(input.substr(i, len));
i += len;
}
std::string result;
for (auto it = codepoints.rbegin(); it != codepoints.rend(); ++it) {
result += *it;
}
return result;
}
So sánh phương pháp
| Phương pháp | Ngôn ngữ | In-place | An toàn | Unicode |
|---|---|---|---|---|
| Manual swap | C/C++ | Có | Cần check null/size | Không (byte-level) |
| std::reverse | C++ | Có | Có | Code point level |
| rbegin/rend constructor | C++ | Không (tạo mới) | Có | Code point level |
| ICU/Boost.Locale | C++ | Tùy | Có | Grapheme cluster (đúng) |