Chuyển đổi chữ cái Unicode có dấu thành không dấu trong C++

Hướng dẫn chi tiết cách chuyển đổi các chữ cái Unicode có dấu thành chữ không dấu trong C++ bằng cách sử dụng thư viện ``. Bài viết này sẽ giúp bạn xử lý các chuỗi văn bản tiếng Việt một cách hiệu quả hơn.

Bài viết này hướng dẫn cách chuyển đổi các chữ cái Unicode có dấu thành chữ không dấu trong C++. Chúng ta sẽ sử dụng bảng ánh xạ ký tự để thay thế các ký tự có dấu bằng các ký tự tương ứng không dấu.

Mã C++

#include <iostream>
#include <unordered_map>
#include <string>

// Hàm chuyển đổi chữ có dấu thành không dấu
std::string removeAccents(const std::string &input) {
    // Bảng ánh xạ ký tự có dấu sang không dấu
    std::unordered_map<char, char> charMap = {
        {'á', 'a'}, {'à', 'a'}, {'ả', 'a'}, {'ã', 'a'}, {'ạ', 'a'},
        {'ă', 'a'}, {'ắ', 'a'}, {'ằ', 'a'}, {'ẳ', 'a'}, {'ẵ', 'a'}, {'ặ', 'a'},
        {'â', 'a'}, {'ấ', 'a'}, {'ầ', 'a'}, {'ẩ', 'a'}, {'ẫ', 'a'}, {'ậ', 'a'},
        {'é', 'e'}, {'è', 'e'}, {'ẻ', 'e'}, {'ẽ', 'e'}, {'ẹ', 'e'},
        {'ê', 'e'}, {'ế', 'e'}, {'ề', 'e'}, {'ể', 'e'}, {'ễ', 'e'}, {'ệ', 'e'},
        {'í', 'i'}, {'ì', 'i'}, {'ỉ', 'i'}, {'ĩ', 'i'}, {'ị', 'i'},
        {'ó', 'o'}, {'ò', 'o'}, {'ỏ', 'o'}, {'õ', 'o'}, {'ọ', 'o'},
        {'ô', 'o'}, {'ố', 'o'}, {'ồ', 'o'}, {'ổ', 'o'}, {'ỗ', 'o'}, {'ộ', 'o'},
        {'ơ', 'o'}, {'ớ', 'o'}, {'ờ', 'o'}, {'ở', 'o'}, {'ỡ', 'o'}, {'ợ', 'o'},
        {'ú', 'u'}, {'ù', 'u'}, {'ủ', 'u'}, {'ũ', 'u'}, {'ụ', 'u'},
        {'ư', 'u'}, {'ứ', 'u'}, {'ừ', 'u'}, {'ử', 'u'}, {'ữ', 'u'}, {'ự', 'u'},
        {'ý', 'y'}, {'ỳ', 'y'}, {'ỷ', 'y'}, {'ỹ', 'y'}, {'ỵ', 'y'},
        {'đ', 'd'},
        {'Á', 'A'}, {'À', 'A'}, {'Ả', 'A'}, {'Ã', 'A'}, {'Ạ', 'A'},
        {'Ă', 'A'}, {'Ắ', 'A'}, {'Ằ', 'A'}, {'Ẳ', 'A'}, {'Ẵ', 'A'}, {'Ặ', 'A'},
        {'Â', 'A'}, {'Ấ', 'A'}, {'Ầ', 'A'}, {'Ẩ', 'A'}, {'Ẫ', 'A'}, {'Ậ', 'A'},
        {'É', 'E'}, {'È', 'E'}, {'Ẻ', 'E'}, {'Ẽ', 'E'}, {'Ẹ', 'E'},
        {'Ê', 'E'}, {'Ế', 'E'}, {'Ề', 'E'}, {'Ể', 'E'}, {'Ễ', 'E'}, {'Ệ', 'E'},
        {'Í', 'I'}, {'Ì', 'I'}, {'Ỉ', 'I'}, {'Ĩ', 'I'}, {'Ị', 'I'},
        {'Ó', 'O'}, {'Ò', 'O'}, {'Ỏ', 'O'}, {'Õ', 'O'}, {'Ọ', 'O'},
        {'Ô', 'O'}, {'Ố', 'O'}, {'Ồ', 'O'}, {'Ổ', 'O'}, {'Ỗ', 'O'}, {'Ộ', 'O'},
        {'Ơ', 'O'}, {'Ớ', 'O'}, {'Ờ', 'O'}, {'Ở', 'O'}, {'Ỡ', 'O'}, {'Ợ', 'O'},
        {'Ú', 'U'}, {'Ù', 'U'}, {'Ủ', 'U'}, {'Ũ', 'U'}, {'Ụ', 'U'},
        {'Ư', 'U'}, {'Ứ', 'U'}, {'Ừ', 'U'}, {'Ử', 'U'}, {'Ữ', 'U'}, {'Ự', 'U'},
        {'Ý', 'Y'}, {'Ỳ', 'Y'}, {'Ỷ', 'Y'}, {'Ỹ', 'Y'}, {'Ỵ', 'Y'},
        {'Đ', 'D'}
    };

    std::string output = "";
    for (char c : input) {
        if (charMap.find(c) != charMap.end()) {
            output += charMap[c];
        } else {
            output += c;
        }
    }

    return output;
}

int main() {
    std::string text = "Chữ có dấu: Việt Nam rất đẹp!";
    std::cout << "Chuỗi gốc: " << text << std::endl;
    std::cout << "Chuỗi không dấu: " << removeAccents(text) << std::endl;
    return 0;
}

Giải thích chi tiết từng dòng code:

  • std::unordered_map<char, char>: Tạo một bảng ánh xạ giữa các ký tự có dấu và ký tự không dấu tương ứng.
  • Vòng lặp for (char c : input): Lặp qua từng ký tự của chuỗi đầu vào.
  • charMap.find(c): Kiểm tra xem ký tự có trong bảng ánh xạ không. Nếu có, thêm ký tự không dấu tương ứng vào chuỗi kết quả.

Yêu cầu hệ thống:

  • C++11 trở lên

Cách cài đặt các thư viện để chạy được đoạn mã C++ trên:

Sử dụng trình biên dịch C++ có hỗ trợ C++11 trở lên, như GCC hoặc Visual Studio.

Lời khuyên:

  • Đối với văn bản có nhiều ký tự tiếng Việt, hãy sử dụng các thuật toán tối ưu hóa hơn hoặc thư viện hỗ trợ Unicode.
Tags: Unicode, C++


Các Hướng Dẫn Cùng Chủ Đề Đang Xem

Ví dụ về Factory Pattern trong C++

Bài viết này sẽ trình bày về Factory Pattern trong C++, một mẫu thiết kế phổ biến giúp tạo ra các đối tượng mà không cần chỉ định rõ lớp cụ thể của đối tượng đó. Điều này giúp tăng tính linh hoạt và khả năng mở rộng cho mã nguồn.
Cách ghi nội dung vào file Excel bằng C++

Hướng dẫn chi tiết cách ghi nội dung vào file Excel sử dụng C++ và thư viện openxlsx. Bài viết này cung cấp các bước cần thiết để tạo và ghi dữ liệu vào file Excel một cách dễ dàng.
Xử lý đa luồng trong C++

Hướng dẫn chi tiết cách xử lý đa luồng trong C++ bằng cách sử dụng thư viện `thread`. Bài viết này giúp bạn hiểu cách sử dụng đa luồng để cải thiện hiệu suất xử lý đồng thời trong các tác vụ.
Ví dụ về Strategy Pattern trong C++

Bài viết này giới thiệu về Strategy Pattern trong C++, giải thích cách hoạt động và cung cấp ví dụ minh họa cụ thể giúp bạn hiểu rõ hơn về thiết kế mẫu này trong lập trình hướng đối tượng.
Cách tự động đăng nhập vào website sử dụng Selenium với Chrome trong C++

Hướng dẫn cách sử dụng Selenium với ChromeDriver trong C++ để tự động đăng nhập vào một trang web. Bài viết sẽ giải thích cách cấu hình Selenium và ChromeDriver cũng như các bước đăng nhập vào một trang cụ thể.
Cách truyền Authentication Header Token khi POST dữ liệu tới API bằng Node.js

Hướng dẫn chi tiết cách truyền Authentication Token trong phần header khi POST dữ liệu tới API sử dụng Node.js. Bài viết sẽ chỉ ra cách sử dụng gói `axios` hoặc `http` để thực hiện các yêu cầu HTTP có xác thực.
Ví dụ về lập trình hướng đối tượng (OOP) trong C++

Bài viết này cung cấp ví dụ minh họa về lập trình hướng đối tượng (OOP) trong C++, bao gồm các khái niệm như lớp, đối tượng, kế thừa và đa hình.
Tạo ứng dụng chat đơn giản sử dụng Socket.IO trong C++

Hướng dẫn cách tạo một ứng dụng chat đơn giản bằng C++ sử dụng Socket.IO, giúp bạn hiểu rõ hơn về lập trình mạng và giao tiếp thời gian thực.
Tạo watermark cho hình ảnh bằng C++

Hướng dẫn cách tạo watermark cho hình ảnh trong C++ bằng cách sử dụng thư viện OpenCV. Bài viết này giúp bạn hiểu cách thêm văn bản hoặc hình ảnh vào một bức ảnh để tạo ra watermark.
Ví dụ về Singleton Pattern trong C++

Bài viết này giới thiệu về Singleton Pattern trong C++, bao gồm cách triển khai và ứng dụng của nó trong việc quản lý đối tượng. Singleton Pattern đảm bảo rằng một lớp chỉ có một thể hiện duy nhất và cung cấp một điểm truy cập toàn cục cho nó.

Đã thêm vào giỏ hàng