Sonderzeichen und Text zentrieren?

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Tiger20000, 19. November 2005 .

  1. 19. November 2005
    Ok ich gebs ja zu.... Es ist ne relativ dumme Frage, aber ok mich intressiert es halt und ich hoffe ich krieg hier die passenden Antworten zu meinen beiden fragen.

    Ich schreibe gerade ein relativ großes Programm und wollt ma fragen ob man mit C++ in der Dos Umgebungsentwicklung folgende Sachen benutzen kann und wenn ja wie?

    1. Ich will Sonderzeichen wie ä, ö, ü oder  einfügen, kann man das auf irgendeine Weise umsetzen?

    2. Ich will einen Text zentrieren sprich das der genau mittig ausgerichtet wird. Wie mach ich das?


    Vielen dank schon mal

    MFG Tiger20000
     
  2. 19. November 2005
    Zu 1: ä, ö, usw. sind keine Sonderzeichen, sondern deutsche Umlaute. Ja das ist indirekt möglich. Wenn du statisch über die DOS-Konsole Zeichen ausgibst interpretiert das Programm diese immer im ASCII Zeichensatz. Ein Trick dies umzubiegen ist einen C++ static_cast an den chars durchzuführen. Dazu kannst du in einem getrennten namespace die deutschen Umlaute definieren und später aufrufen. Hier die Lösung dazu:

    Code:
    namespace Umlaute
    {
     const unsigned char AE = static_cast<unsigned char>(142);
     const unsigned char ae = static_cast<unsigned char>(132);
     const unsigned char OE = static_cast<unsigned char>(153);
     const unsigned char oe = static_cast<unsigned char>(148);
     const unsigned char UE = static_cast<unsigned char>(154);
     const unsigned char ue = static_cast<unsigned char>(129);
     const unsigned char ss = static_cast<unsigned char>(225);
    }
    Aufruf zum Beispiel mit:

    Code:
    int main()
    {
     cout << "Bin"<< Umlaute::ae << "rzahlen." << endl;
    }
    Zu 2: Du kannst Text in der Konsole mit left und right ausrichten. Für das Zentrieren gibt es keinen direkten ostream Manipulator. Natürlich kannst du dir leicht eine eigene Funktion schreiben welche das für dich erledigt. Hierfür steht dir die Header-Datei iomanip zur Verfügung!
     
  3. 19. November 2005
    Vielen Vielen Dank... hast schon ma ne 10.....

    Hab dazu aber jetzt wieder fragen :-D

    1. Wie kann man eine Variable (bzw. in dem Fall jetzt ein Umlaut) mit cprintf wiedergeben? Weil das Programm soll mit Farbe sein und das geht ja nur mit cprintf oder?

    2. Wo kann ich so ne ASCII Zeichentabelle angucken?

    3. Kann man auch Irgendwie die Windows Zeichentabelle einbaun?
    (Start - Alle Programme - Zubehör - Systemprogramme - Zeichentabelle)


    Vielen Dank schon mal wieder! Echt super wie schnell einem hier geholfen wird
     
  4. 19. November 2005
    Zu 1: Ich verstehe nicht so ganz, was du mit Programm meinst? Ich nehme an du meinst Konsole? Die Farbe der Konsole einzustellen ist abhängig vom verwendeten Betriebssystem. Auf UNIX kannst du direkt über die Steuerzeichen formatieren.

    Ich nehme aber auch an das du Windows verwendest? Hier kannst du die Win32 API Funktion SetConsoleTextAttribute aufrufen. Dazu brauchst du keinen C Code, also kein printf! Ich habe dir mal eine Datei programmiert, welche ich hier schon einmal gepostet habe. Sie enthält Konsolen Formatierungsmöglichkeiten. Schau dir einfach mal mein Beispiel in der main.cpp an!

    Zu 2: Zum Beispiel hier!

    Zu 3: Was meinst du mit einbauen? Du programierst in Konsole. Hier kannst du nicht so einfach eine UNICODE Tabelle grafisch einbauen. Der UNICODE ist ein 2Byte Zeichencode zur Darstellung von tausenden Zeichen. Du kannst in deinem Konsolenprogramm eine C++ String Klasse implementieren, die UTF8 kodiert. Wenn du einzelne Zeichen ausgeben möchtest geht das z.B. über Escape-Sequenzen mit z.B. \u0356. Hier ein Beispiel in Managed C++ für .NET.

    Code:
    #using <mscorlib.dll>
    using namespace System;
    using namespace System::Text;
    using namespace System::Collections;
    
    int main()
    {
     // The encoding.
     UnicodeEncoding* unicode = new UnicodeEncoding();
    
     // Create a String* that contains Unicode characters.
     String * unicodeString =
     S"This Unicode string contains two characters with codes outside the traditional ASCII code range, Pi (\u03a0) and Sigma (\u03a3).";
     Console::WriteLine(S"Original string:");
     Console::WriteLine(unicodeString);
    
     // Encode the String*.
     Byte encodedBytes[] = unicode -> GetBytes(unicodeString);
     Console::WriteLine();
     Console::WriteLine(S"Encoded bytes:");
     IEnumerator* myEnum = encodedBytes->GetEnumerator();
     while (myEnum->MoveNext())
     {
     // Byte b = __try_cast<Byte>(myEnum->Current);
     Byte b = *__try_cast<Byte __gc*>(myEnum->Current);
     Console::Write(S"[{0}]", __box(b));
     }
     Console::WriteLine();
    
     // Decode bytes back to String*.
     // Notice Pi and Sigma characters are still present.
     String * decodedString = unicode -> GetString(encodedBytes);
     Console::WriteLine();
     Console::WriteLine(S"Decoded bytes:");
     Console::WriteLine(decodedString);
    }
    EDIT: Achja, in Visual C++ (CString) geht die Kompilierung von Unicode WideChars mit dem voranstehenden großen _T:

    Code:
    CString s;
    s.Format(_T("%d"), total);
    Siehe auch CString Management!
     
  5. 22. November 2005
    Sorry is jetzt vielleicht Spam, aber auf meine PM antwortest du nicht....


    Wie kann ich mit cout etwas fablich gestallten ohne jetzt ne ganz andere datei einzufügen (include <bla.h>)???? geht das auch irgendwie so?

    MFG Tiger20000
     
  6. 23. November 2005
    Zunächst einmal weiß ich noch immer nicht genau für welches Betriebssystem du programmierst obwohl es nach Windows aussieht. Dies ist deshalb von Bedeutung weil das Einfärben von Konsolentext vom OS abhängt und ein Implementierung dieser Art zwar auch mit reinem ANSII C++ möglich wäre aber sehr kompliziert ist. Deshalb der von mir gepostete Windows Code!

    Die Funktion cout gibt ledeglich Text auf die Konsole aus. Davon leitet sich auch Ihr Name ab "Console output". Gleichzeitig die Farbe zu bestimmen ist damit nicht möglich.

    Weitere Details hab ich dir per PM zugesandt! :]
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.