Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencetak Nilai C Enum sebagai Teks Boleh Dibaca Manusia Tanpa Menggunakan Pernyataan Suis/Jika?
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& operator<<(std::ostream& 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& operator<<(std::ostream& 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!