C++ getline eingabe buchstabenweise speichern und mit jedem buchstaben einzeln arbeiten?



  • ok...war jetzt nicht so gemeint es ist nur so das ich keine ahnung hab wonach ich suchen soll weil ich irgendwie nicht weiß was da genau gemacht werden soll! aber danke für die hilfe!



  • Ich habe bereits gesagt, wie du das am besten machst. stringstreams.

    Jetzt gehst du auf die Referenz, die ich gepostet habe und suchst dort nach 'stringstream'. Und dann schaust du, wie man damit umgeht. Und dann solltest du von alleine auf die Lösung kommen.



  • Ich versteh trotzdem nicht wie ich das machen soll! soll ich jetzt jeden einzelnen ausgabewert in einer variablen speichern und diese dann am ende ausgeben?! das wäre doch viel zu viel arbeit!



  • Ok du willst es in deine Datei Speichern?
    Lass mal überlegen was fallen uns da für Suchbegriffe ein?
    Ahh naklar
    C++ Datei schreiben
    C++ Dateien lesen und schreiben
    Und nun ab mit dir zu google und eingeben und lesen!!



  • ja ne wie man speichert weiß ich mitlerweite aber ich habe keine ahnung wie ich diese ausgegebenen stücke in einer geeigneten variablen speichert! DAMIT ich das speichern kann!

    ich dachte beim speichern an:

    ofstream speichern;
    speichern.open("egal was");
    speichern<<"hier muss das rein was ausgegeben wird!";
    speichern.close();



  • ja dann speicher doch das was ausgegeben werden soll vorher in einem string und dann hau es in die datei.



  • Ich glaub Werner hatte in dem Forum mal nen Code geschrieben, der es möglich macht mit einer Zeile, die Ausgabe auf Bildschirm und in eine Datei zu bringen.
    Ungefähr so sieht die Zeile aus :

    streamname << ausgabe;
    

    Und damit wurde es dann angezeigt und in der Txt gespeichert. Am besten gehste mal auf Werners Profil und suchst mal nach Operatorenüberladung oder sonstiges.



  • FreakY<3Cpp schrieb:

    Ich glaub Werner hatte in dem Forum mal nen Code geschrieben, der es möglich macht mit einer Zeile, die Ausgabe auf Bildschirm und in eine Datei zu bringen.

    Dazu kann man sich auch eine Klasse schreiben, die den operator<< überlädt und dessen Aufrufe intern jeweils an std::cout und ein Objekt von std::fstream weiterleitet...

    Das, was bereits auf der Konsole steht, kann man normalerweise nicht mehr zurückholen.



  • Das meinte ich ja, aber ich glaube kaum das der Threadersteller das kann, von daher sollte er sich den Code holen.



  • FreakY<3Cpp schrieb:

    int main()
    {
        std::string satz;
        getline(std::cin, satz);
        for(int j = 0; j < satz.size(); j++)
        {
            if(satz[j] == 'a')
            {
                std::cout << "Der Satz enthaehlt ein a" << std::endl;
            }
            if(satz[j] == 'b')
            {
                std::cout << "Der Satz enthaehlt ein b" << std::endl;
            }
            //if(...
        }
    }
    

    Meinst du so etwas? Du kannst den String wie ein Char-Array handhaben und es wird der 1. Buchstabe bis zum letzten Buchstaben geprüft.
    Die for-Schleife wird also solange ausgeführt, wie der String satz "lang" ist.

    Frage: Was heißt denn das std: :?



  • Das ist ein "Verweis" auf den Standardnamensraum std:: . Die doppelpunkte bedeuten, das man auf einen "Member" aus diesen Namensraum zugreift.



  • Das ist der Namensraumauflöser. Damit kannst du auf alles in dem Namensraum std zugreifen, ohne using namespace zu benutzen.

    namespace my
    {
     namespace application
     {
      class foo{};
     }
    }
    
    ...
    
    foo g; //geht nicht
    my::application::foo f; //durch die beiden namensräume zu foo
    


  • Hallo:

    Folge, dann kann ich das also weglassen, wenn ich "using namespace std" schon zu stehen habe im Haeder?

    Danke



  • Nein, niemals using namespace im Header benutzen.



  • Bekell schrieb:

    Hallo:

    Folge, dann kann ich das also weglassen, wenn ich "using namespace std" schon zu stehen habe im Haeder?

    Danke

    Ja, das könntest du. Allerdings wäre das dann gleich wieder gegen das Konzept von namespaces. Die definieren nämlich, wie der Name schon sagt einen Namensraum.

    namespace meins
    {
     class foo{};
    }
    
    namespace deins
    {
     class foo{};
    }
    ...
    
    meins::foo f1;
    deins::foo f2;
    

    Somit kannst du Namenskonflikten aus dem Weg gehen, ohne irgendwelche kryptischen Bezeicher zu wählen. In einem Header hat das nichts zu suchen aus dem einfachen Grund, dass der von jemandem included wird und dann (ohne es zu wissen) bereits ein namensraum offen ist und du der hat dann die schönen Namenskonflikte wieder. In einer Quelldatei (.cpp) ist das allerdings kein Problem, da der nicht included wird und somit auch nur dort bekannt ist.



  • Hallo

    cout << name.length()<< endl;
    

    Mir ist die Bedeutung der formel "endl" im Beispiel nicht deutlich.

    Soll das end of length heissen?

    Danke für die Antwort



  • Nein das steht für "end of line".Was soviel bedeutet, das dort ein Zeilenumbruch nach der Ausgabe gemacht wird.



  • FreakY<3Cpp schrieb:

    Ich glaub Werner hatte in dem Forum mal nen Code geschrieben, der es möglich macht mit einer Zeile, die Ausgabe auf Bildschirm und in eine Datei zu bringen.
    Ungefähr so sieht die Zeile aus :

    streamname << ausgabe;
    

    .. ein bisschen mehr ist es schon.

    Ich glaube Du meinst den Beitrag über die 'Weiche'. Aber so weit ich Blake_MaX verstanden habe, möchte er einfach 'nur' Daten einlesen und danach wieder speichern - oder?

    Gruß Werner


Anmelden zum Antworten