(Teil-)Satz in string Variable speichern



  • Liebe Community,
    ich habe eine Frage. Ich habe ein C++-Programm geschrieben, das den User auffordert eine Reihe Medikamente einzugeben und das Programm spuckt einen Satz aus wie: "Die bisherige Medikation mit Medikament1, Medikament2 und Medikament3 wurde fortgeführt."
    Das funktioniert einwandfrei. Wie mache ich aber, dass ich genau diesen Satz (zB in einer string-Variablen) speichern kann und später es in einem Text an willkürlicher Stelle in diesen Text einbauen kann?
    Wenn ich die gesamte Funktion benutze, spuckt er leider nicht nur diesen einen Satz aus, sondern auch noch die ganze Eingabeaufforderungen davor.

    Vielen lieben Dank,
    Dickie



  • @dickie sagte in (Teil-)Satz in string Variable speichern:

    Wenn ich die gesamte Funktion benutze

    Hallo,

    du hast also eine Funktion?
    Dann gib einen string zurück, statt eine Ausgabe zu machen!?
    Sonst zeig mal ein bißchen Code; kann mir gerade nicht vorstellen, wo das Problem ist.



  •  #include <iostream>
    
    using namespace std;
    
    void generatorMedis(int index, int letzterIndex, string medis[])
        {
            if (letzterIndex == 0) //wenn es also kein medikament gibt, sondern nur die 0
                cout << "Es wurde keine Medikation fortgefuehrt. " << endl;
            else
                {
                cout << "Die bisherige Medikation mit ";
                index = 0;
    
                   if (letzterIndex > 1) //wenn es also 2 oder mehr medikamente gibt
                    {
                        while (index < (letzterIndex - 2)) //dieses while geht also bis zum vorletzten medikament,
                            //das nicht 0 ist
                            {
                                cout << medis[index] << ", "; //zwischen jedem aufgezaehlten medi muss ein komma stehen,
                                //ausser zwischen dem vorletzten und letzten
                                index++;
                            }
                    cout << medis[index] << " und "; //zwischen dem vorletzten und letzten medi steht ein "und"
                    index++; //jetzt sind wir beim letzten medikament angelangt, das nicht 0 ist
                    cout << medis[index] << " wurde fortgefuehrt. ";
                    }
    
    
                    else //bei nur einem einzigen Medikament, das nicht 0 ist
                        {
                            cout << medis[0] << " wurde fortgefuehrt. ";
    
                        }
                }
        }
    
    void eingabeMedis() // im folgenden ist das komplette technische geruest fuer den eigentlichen textgenerator
    {
    string medis[15]; int index = 0, letzterIndex;
        while (index < 15) //es soll der reihe nach den medikamenten-platzhaltern medis zugewiesen werden
            {
                cout << index + 1 << ". Medikament: ";
                cin >> medis[index];
                if (medis[index] != "0") //solange man keine 0 eingibt, geht das spiel weiter
                    index++;
                    else { //wenn man die 0 eingibt, speichert das programm die anzahl der eingegeben medis
                            //die 0 wird dabei auch als eigenstaendiges medikament angesehen
                        letzterIndex = index;
                        index = 15; //der index wird auf 15 gesetzt, somit bricht "while" ab, s. bedingung
                        }
            }
    
        cout << "\n\n\n" << endl; //paar leerzeilen zur besseren lesbarkeit
    
        generatorMedis(index, letzterIndex, medis);
    
    }
    
    
    void prolog() //hier kommt nur ein einleitungstext ohne programmierte funktionen
    {
        cout << "Liebe Userin, lieber User!\n"
             << "Willkommen zum ersten intelligenten Interface fuer Arztbriefe!\n"
             << "Mit einigen wenigen Angaben koennen Sie nun einen Fliesstext generieren, den Sie in Ihren Arztbrief hineinkopieren koennnen.\n"
    
             << "\n\nBeginnen wir mit dem Einleitungssatz. Ein Patient wird auf die Station aufgenommen und das erste, was man macht,\n"
             << "ist, ihm seine bisherigen Medikamente anzusetzen. Deshalb starten wir mit der Aufzaehlung der fortgefuehrten Medikamente.\n"
             << "\nGeben Sie nun die Medikamente ein. Falls der Patient ohne Medikamente kam, geben Sie einfach die \"0\" ein.\n"
             << "Wenn Sie alle Medikamente des Patienten eingegeben haben, werden Sie weiter aufgefordert, ein Medikament einzugeben.\n"
             << "Geben Sie auch hier dann einfach \"0\" ein und die Eingabeaufforderung wird beendet.\n"
    
             << "\n\nAnschliessend wird direkt ein Fliesstext aus den eingegebenen Medis erstellt.\n"
             << "Beginnen Sie jetzt." << endl;
    
    }
    
    
    int main()
    {
        prolog();
        cout << "\n\n"; //ein paar leerstellen zur besseren leserlichkeit
        eingabeMedis();
        cout << "\n\n\n\n"; //ein paar leerstellen zur besseren leserlichkeit
    
    
        return 0;
    }
    
    


  • Also im Prinzip, wenn man ganz runterscrollt und sieht, unter int main(), dort wird die Funktion eingabeMedis() aufgerufen und in dieser Funktion wird die andere Funktion generatorMedis() aufgerufen, die dann den gewünschten Satz generiert. Wie kann ich also aus generatorMedis() machen, dass der ausgegebene Satz eine string Variable gespeichert ist, die ich an beliebig anderer Stelle wieder hervorrufen kann?



  • @jockelx sagte in (Teil-)Satz in string Variable speichern:

    Dann gib einen string zurück, statt eine Ausgabe zu machen!?

    Also in etwa

    string generatorMedis(int index, int letzterIndex, string medis[])
    {
        string s;
    
        // ...
        s += "Die bisherige Medikation mit ";
        // ...
        s += medis[index];
        s += " wurde fortgefuehrt. ";
        // ...
        
        return s;
    }
    


  • @th69 Vielen Dank, ich muss das mal ausprobieren!