C++ Text vertikal schreiben



  • Hallo Leute. Habe es hinbekommen dass ich den Text in einer Zeile ausgeben kann. Allerdings müsste ich den Text vertikal ausgeben. Hoffe mir kann jemadn weiter helfen.



  • Buchstabe für Buchstabe in jeweils einer neuen Zeile?



  • Ja genau



  • HAbe dieses Programm als Vorlage!

    #include <iostream>
    #include <cstdlib>
    #include <vector>

    #include "print_all.h"

    using namespace std;

    int main()
    { vector<int> v{1, 2, 4, 5};
    string name{"Max Mustermann"};

    print_all(cout, name, '"', "\"\n", ' ');

    return EXIT_SUCCESS;
    }



  • clee schrieb:

    Ja genau

    Ja dann mach das doch.



  • print_all hört sich ja ganz toll an. Woher hast du das?



  • Haben dieses Template vom Professor bekommen und dürfen diese nicht verändern.



  • cleee schrieb:

    Haben dieses Template vom Professor bekommen und dürfen diese nicht verändern.

    Dann wird er den Sinn/Gebrauch ja wohl auch erklärt haben.



  • print_all hat uns der Professor beigebracht. Allerdings haben es nur wenige verstanden.



  • Und was ist jetzt genau deine Frage?



  • Als kleine Hilfestellung könnte man ein paar Stichwörter nennen.

    - der Text ist ein string
    - einen string kann man behandeln wie einen vector aus char
    - man iteriert durch diesen und gibt jedes Element mit nachfolgenden Zeilenumbruch aus.

    Ich vermute, die Vorlage soll extra unverständlicher Pseudo-Code sein, um die Schwierigkeit künstlich zu erhöhen?



  • Wie ich es hinbekommen dass der Text vertikal ausgegeben wird.



  • Ist die Definition von "print_all" also auch der Inhalt der Funktion vorgegeben, oder ist diese Funktion die Stelle an der ihr selbst etwas tun sollt?



  • inflames2k schrieb:

    Ist die Definition von "print_all" also auch der Inhalt der Funktion vorgegeben, oder ist diese Funktion die Stelle an der ihr selbst etwas tun sollt?

    An print_all dürfen wir nichts verändern.



  • Da wäre ich überfordert. Wie soll man denn std::cout einer Funktion übergeben? Ist das überhaupt möglich?



  • Also dies ist die Angabe die wir bekamen.

    a) Durch die einmalige (!) Verwendung des Funktions-Templates print all() der
    Aufgabe 4 mit dem unveränderten String name (Sie dürfen das Template dazu
    nicht verändern, im Zweifelsfall muss Ihr Programm auch mit meiner Version von
    print all() funktionieren!) wird folgender Output erzeugt:
    Inhalt von Name:
    Buchstabe 1: M
    Buchstabe 2: a
    Buchstabe 3: x
    Buchstabe 4:
    Buchstabe 5: M
    Buchstabe 6: u
    Buchstabe 7: s
    Buchstabe 8: t
    Buchstabe 9: e
    Buchstabe 10:r
    Buchstabe 11:m
    Buchstabe 12:a
    Buchstabe 13:n
    Buchstabe 14:n
    Der print all() -Aufruf muss das letzte Statement in main() vor dem return
    sein und der Text muss vor der Auführung dieses return bereits am Bildschirm
    zu sehen sein.
    Ein Tipp: Sie konnen diese Aufgabe losen, indem Sie print all() als Ausgabe-
    trenner selbstgeschriebene Objekte übergeben. Diese brauchen selbst eine Stream-
    ausgabe, die beim Aufruf mit << obige fortlaufend nummerierten Labels erzeugen.
    Falls C++ sich beschwert, dass Sie in der Streamausgabe den Zähler des konstan-
    ten Objekts inkrementieren, machen Sie diesen mutable .



  • Und wo in diesem Output ist '"' und ' ' vorhanden?

    Solche Aufgabenstellungen finde ich unmöglich. Vielleicht sind solche Aufgaben in einem Studium oder so benötigt, aber eine einfache Möglichkeit, die Ausgabe zu lösen ist so ganz anders als dieses Schwurbilumm aus Text.



  • Irgendwie verstehe ich lemon03s Argumente nicht. Warum suchst du Anführungszeichen in der Ausgabe? Und wo ist das Problem, cout an eine Funktion zu übergeben? Das macht man bei dem operator<< doch andauernd?!

    Viel interessanter ist hier die Signatur von Print_all. Die Lösung steht doch schon fast da. Als Ausgabetrenner soll man ein Objekt einer eigenen Klasse nehmen, wo der operator<< passend überladen ist. Da werdet ihr doch was zu besprochen haben!



  • Wie sieht denn die komplette Signatur (bzw. Definition) der Funktion print_all aus?

    Du sollst wohl dann eine eigene Klasse übergeben, für welche dann der Stream-Operator << überladen ist (welcher dann die Ausgabe "Buchstabe X:" erzeugt).

    lemon03 schrieb:

    Da wäre ich überfordert. Wie soll man denn std::cout einer Funktion übergeben? Ist das überhaupt möglich?

    Ganz einfach als

    std::ostream&
    


  • Th69 schrieb:

    Wie sieht denn die komplette Signatur (bzw. Definition) der Funktion print_all aus?

    Du sollst wohl dann eine eigene Klasse übergeben, für welche dann der Stream-Operator << überladen ist (welcher dann die Ausgabe "Buchstabe X:" erzeugt).

    lemon03 schrieb:

    Da wäre ich überfordert. Wie soll man denn std::cout einer Funktion übergeben? Ist das überhaupt möglich?

    Ganz einfach als

    std::ostream&
    

    Also so sieht die print_all Fkt aus.
    /*
    * print_all.h print_all prints a Container
    */

    #ifndef PRINT_ALL_H
    #define PRINT_ALL_H

    #include <iostream>
    #include <cstdlib>

    template<typename Container, typename Head, typename Tail, typename Sep>
    void print_all(std::ostream& out, const Container& v,
    const Head& head, const Tail& tail, const Sep& sep)
    {
    out << head;
    for (auto& x: v) {
    out << x;
    if (&x != &v.back())
    out << sep;
    }
    out << tail;
    }

    #endif



  • Th69 schrieb:

    lemon03 schrieb:

    Da wäre ich überfordert. Wie soll man denn std::cout einer Funktion übergeben? Ist das überhaupt möglich?

    Ganz einfach als

    std::ostream&
    

    Aha, danke 🙂 Ich will nichts gesagt haben...


Anmelden zum Antworten