Von Zeichen zur Blindenschrift



  • Hallo zusammen. Ich bin ziemlicher C++ Leie und setze mich erst seit ca. 1 Woche mit der Sprache auseinander. In einem englischen Tutorial bin ich auf folgende Fragestellung gestoßen und komm einfach nicht auf den Lösungsansatz.

    Es geht in der Frage um die enkodierung von einzelnen buchstaben in die Blindenschrift (dargestellt duch eine sechstellige Zeichenfolge von "X" und "." z.B. a = X..... ). Für das komplette Alphabet sind die jeweiligen Zeichenfolgen gegeben (müssen aber in der enkodierung_zeichen Funktion eingelesen werden) sowie folgende Main Funktion:

    #include <iostream>
    using namespace std;
    
    #include "bschrift.h"
    
    int main(){
    
    int groesse;
    char bschrift[512];
    
    bschrift[0] = '\0';
    
    groesse = enkodierung_zeichen('g', bschrift);
    cout << "Das Zeichen 'g' enkodiert in der Blindenschrift ist ' << bschrift << "' (" << groesse << " Zeichen)" << endl;
    
    bschrift[0] = '\0';
    
    return 0;
    
    }
    

    Ich habe mehrmals versucht die enkodierung_zeichen Funktion selber zu schreiben bin aber jedes Mal kläglich gescheitert. Jetzt bin ich mir auch nicht mehr sicher ob ich die Main Funktion richtig interpretiert habe. Kann mir jemand weiterhelfen? Was wäre der einfachste Lösungsansatz?

    Danke



  • Der einfachste Ansatz ist ein Array zu benutzen:

    const char * const cBlindenschrift[256] = // für alle ASCII-Zeichen
    {
      "",
      ...
      "",
      "X..X..", // A
      "......",
      ...
      "XXXXXX", // Z
      ...
    };
    

    Du mußt dir dann nur eine ASCII-Tabelle heranziehen und
    an den entsprechenden Stellen die richtigen Blindenschrifteinträge vornehmen (A = 65, Z = 90).

    Zugriff dann einfach über den Index-Operator []:

    #include <string.h> // für strcpy und strlen
    
    int enkodierung_zeichen(unsigned char c, char *pText)
    {
      strcpy(pText, cBlindenschrift[c]); // Kopieren des Encodings
      return strlen(pText);
    }
    

    Ich hoffe, das Tutorial erklärt auch den Typ 'string' (denn damit ist es noch einfacher).



  • Ich gehe mal davon aus, dass die Brailleschrift folgendermaßen dargstellt wird:

    x.
    .x
    xx
    

    oder

    ..
    x.
    x.
    

    Was auffällt ist, dass nur zwei Zeichen vorkommen '.' und 'x'. Das schreit nach einer binären Repräsentation 😉

    char[] lateinisches_alphabet;
    unsigned char[] braille_alphabet; // Hier binäre Darstellung

    Gleicher Index -> gleicher "Wert"

    Grüße... Heiko



  • Hallo nochmal. Danke erstmal an beide.

    Ich gehe mal davon aus, dass die Brailleschrift folgendermaßen dargstellt wird:

    In der Tat wird die Schrift so dargestellt und genau diese Darstellung ist Bestandteil der nächsten Frage im Tutorial. (soweit bin ich noch nicht)

    Der einfachste Ansatz ist ein Array zu benutzen:

    Das war auch mein Ansatz aber mir fehlt es offensichtlich noch an Erfahrung in C++. Wo ich mir noch unsicher bin ist bei der Deklaration des Arrays in der enkodierung_zeichen Funktion.

    Nach Main:

    Nehmen wir an ich deklariere das Array bschrift[512] in der Funktion und initialisiere es mit den Zeichenfolgen für a-z, dann müsste ich im nächsten Schritt das Array nach dem gesuchten Zeichen durchsuchen und die jeweilige Zeichenfolge ausspucken lassen (oder ggf. ein default) und letztlich die Länge der Zeichenfolge als Return ausgeben. Das müsste doch klappen oder? Denn in der Main Funktion wird das ja so vorgegeben. So jedenfalls bin ich bisher vorgegangen.

    Mit Pointern und heranziehen von extern Tabellen kenne ich mich noch nicht so gut aus deswegen hatte ich gehofft dass ein einfacher Lösungsweg wie ich ihn gegangen bin (ist zwar viel tippen) möglich ist. Nur glaube ich dass schon beim schreiben ins Array und durchsuchen Probleme auftreten.

    Wenn ihr kurz Zeit hättet und ein paar Reihen Code für die Zeichen a = X....., b = XX...., c = XXX... , d = XXXX.. und die Suche bereitstellen könntet würdet ihr mir sehr weiterhelfen.

    Danke



  • Erstmal dein Einlesen:

    #include <iostream>
    #include <string>
    #include "bschrift.h"
    
    int main()
    {
        std::cout << "Zeichenkette 2 Blindenzeichen V001\n\n" << std::endl;
        std::cout << "\tBitte geben Sie nun einen Satz ein!" << std::endl;
        std::string line;
        std::getline(std::cin, line);
        std::cout << "\nIn Blindenschrift ergibt sich folgende Zeichenkette:" << std::endl;
        encode_to_braille(line, line);
        std::cout << line << " (" << line.length() << " Zeichen)" << std::endl;
    }
    

    Soo ... dann schreibst du jetzt halt die Funktion encode_to_braille ..

    void encode_to_braille(std::string const& str, std::string& dest);
    {
        dest.clear();
        for (std::string::iterator it = str.begin(); it != str.end(); ++it)
        {
            // (*it) ist das Zeichen an der aktuellen Position ... das jetzt auswerten!
            std::string brialle_char("XXXXX");
            // da muss halt der entsprechende Code anstelle von XXXXX hin ...
            dest += " "; dest.append(brialle_char);
        }
    }
    

    ...



  • Danke. So in etwa hatte ich mir das vorgestellt. Jetzt werde ich versuchen herauszufinden was bei mir alles schief gelaufen ist.


Log in to reply