hardcodierte character mit ascii, unicode und utf-8



  • hola leute

    angenommen ich mach mir eine funktion find die einen stream uebernimmt und nach einem bestimmten zeichen sucht.

    template<class CHAR>
    bool find(std::basic_istream<CHAR> *is, CHAR c) { ... }
    

    solange die zu suchenden zeichen <= 127 sind, funktioniert es mit der uebergabe eines normalen chars.

    find(is, '=');
    

    aber wie macht man es am besten wenn man andere zeichen verwenden will ?

    bisher hab ich fuer solche faelle ein struct mit statischen membern gemacht und die jeweils spezialisiert:

    template<typename CHAR>
    struct special_chars
    {
       static const CHAR scharfes_s = 0;
    };
    
    template<>
    struct special_chars<char>
    {
       static const char scharfes_s = 225; // ß
    };
    
    template<>
    struct special_chars<wchar_t>
    {
       static const wchar_t scharfes_s = 223; // ß
    };
    
    template<>
    struct special_chars<int>
    {
       static const int scharfes_s = 0xC39F; // ß
    };
    
    find(is, special_chars<char>::scharfes_s);
    

    ob die werte stimmen weiß ich grad net. also haegt euch nicht daran auf.
    kennt jemand von euch ne bessere loesung fuer sowas ?

    Meep Meep



  • Möglichkeit 1: Übergebe einen Unicode-Codepoint (als int32_t oder so), den du vorher aus der UTF-8-Kodierung gewonnen hast.

    Möglichkeit 2: Suche nicht nach einem bestimmten Zeichen/Codepoint, sondern nach einem String. Der String kann dann die UTF-Kodierung eines bestimmten Codepoints enthalten.


Anmelden zum Antworten