Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencetak Nilai C Enum sebagai Teks Boleh Dibaca Manusia Tanpa Menggunakan Pernyataan Suis/Jika?

Bagaimanakah Saya Boleh Mencetak Nilai C Enum sebagai Teks Boleh Dibaca Manusia Tanpa Menggunakan Pernyataan Suis/Jika?

Susan Sarandon
Susan Sarandonasal
2024-11-29 22:08:13924semak imbas

How Can I Print C   Enum Values as Human-Readable Text Without Using Switch/If Statements?

C : Mencetak Nilai Enum dalam Format Teks

Dalam bidang pengaturcaraan, penghitungan (enum) sering digunakan untuk memberikan nilai angka kepada negeri atau kategori yang berbeza. Walau bagaimanapun, apabila berurusan dengan enum, adalah perlu untuk menyampaikan nilai mereka dalam format teks yang lebih bermakna untuk kebolehbacaan dan pemahaman yang lebih baik.

Masalahnya: Menterjemah Nilai Enum kepada Teks

Pertimbangkan enum yang ditakrifkan seperti berikut:

enum Errors {
    ErrorA = 0,
    ErrorB,
    ErrorC,
};

Sekarang, mari cuba mencetak nilai pembolehubah enum:

Errors anError = ErrorA;
std::cout << anError; // Will print "0" instead of "ErrorA"

Cabaran di sini terletak pada menukar nilai berangka enum kepada perwakilan teks yang sepadan.

Penyelesaian Tanpa Menggunakan Suis/Jika

1. Menggunakan Peta:

Satu pendekatan melibatkan penggunaan peta untuk mewujudkan kesesuaian antara nilai enum dan perwakilan teksnya:

#include <map>
#include <string_view>

// Create a map that associates enum values with string views
std::map<Errors, std::string_view> errorTextMap = {
    {ErrorA, "ErrorA"},
    {ErrorB, "ErrorB"},
    {ErrorC, "ErrorC"},
};

// Overload the << operator to handle enum values
std::ostream&amp; operator<<(std::ostream&amp; out, const Errors value) {
    return out << errorTextMap[value];
}

2. Menggunakan Tatasusunan Struktur dengan Carian Linear:

Penyelesaian alternatif melibatkan mencipta pelbagai struktur:

#include <string_view>

// Define a structure to store enum values and text representations
struct MapEntry {
    Errors value;
    std::string_view str;
};

// Create an array of structures containing the mapping
const MapEntry errorTextEntries[] = {
    {ErrorA, "ErrorA"},
    {ErrorB, "ErrorB"},
    {ErrorC, "ErrorC"},
    {ErrorA, 0} // Dummy entry to terminate the search
};

// Overload the << operator to handle enum values
std::ostream&amp; operator<<(std::ostream&amp; out, const Errors value) {
    const char* s = nullptr;
    for (const MapEntry* i = errorTextEntries; i->str; i++) {
        if (i->value == value) {
            s = i->str;
            break;
        }
    }

    return out << s;
}

Uji Penyelesaian:

Untuk menunjukkan kefungsian cadangan penyelesaian:

#include <iostream>

int main() {
    std::cout << ErrorA << std::endl;
    std::cout << ErrorB << std::endl;
    std::cout << ErrorC << std::endl;

    return 0;
}

Output:

ErrorA
ErrorB
ErrorC

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencetak Nilai C Enum sebagai Teks Boleh Dibaca Manusia Tanpa Menggunakan Pernyataan Suis/Jika?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn