Pointer/strToken



  • Hallo ich habe folgende Aufgabe

    Ihre Aufgabe ist es, einen Taschenrechner in C++ zu erstellen.Die Eingaben sollen über eine Konsole
    in einer Zeile erfolgen. Das Format ist befehl arg1 arg2 … argN. Ein Beispiel zur Eingabe
    dafür wäre dann wie folgt:
    add 20 22
    42
    add 6 8 9
    23

    Realisieren Sie das “Grundgerüst” ihrer Anwendung. Holen Sie die Eingabe vom Benutzer. Die Anzahl der Parameter soll variabel sein. Machen sie die Argumente einzeln ansprechbar.

    Aber iregendwie klappt das alles nicht

    DANKE SCHON MAL

    Hier mein CODE

    #include "StdAfx.h"
    #include <string>
    #include <iostream>
    #include <cstring>)
    //#include <taschenrechner.h>
    using namespace std;
    
    using namespace std;
    
    int main(){
    
    	string eingabe;
    
    	cout << "Befehl eingeben: "  <<endl;
    	getline(cin, eingabe);
    
    	char* zeichen = new char[eingabe.size()+1];
    	strcpy(zeichen, eingabe.c_str());
    
    	char* arr = new char[(eingabe.size()+1)];
    
    	arr[0] = strtok(zeichen, " "); 
          int i = 0;                               
        while(arr[i]!= NULL) 
            {  
            i++;
            arr[i] = strtok(NULL, " "); 
    	}
    			system("pause");
    			return 0;
    
    }
    


  • #include <string>
    #include <vector>
    #include <sstream>
    
    std::vector<std::string> split_string(std::string s)
    {
        std::istringstream iss(a);
        std::vector<std::string> substrings;
    
        while(iss >> s)
            substrings.push_back(s);
    
        return substrings;
    }
    

    Hilft dir das weiter?



  • Ich würde das gerne mit pointer machen
    bzw es kann auch sein das ich das mit pointer machen "muss"
    Ich danke dir erst mal
    Bin für weitere Ideen sehr dankbar



  • In der Aufgabenstellung steht nichts von Zeiger, also kannst du es doch so machen. Ist einfacher && nicht so fehleranfällig.



  • 314159265358979 schrieb:

    In der Aufgabenstellung steht nichts von Zeiger, also kannst du es doch so machen. Ist einfacher && nicht so fehleranfällig.

    Vectoren wurden noch nicht behandelt

    Wie muss ich denn meinen code anpassen?



  • Dann guck dir vector mal an, das ist ganz einfach und macht deinen Code um einiges besser. 😉
    http://www.cplusplus.com/reference/stl/vector/



  • 314159265358979 schrieb:

    Dann guck dir vector mal an, das ist ganz einfach und macht deinen Code um einiges besser. 😉
    http://www.cplusplus.com/reference/stl/vector/

    Wie muss ich denn meinen code anpassen?

    Bitte geht auf meine Frage ein...



  • Warum weigerst du dich, etwas neues zu lernen? Nur weil dein Professor/Lehrer/Buch schlecht ist, heißt das nicht, dass du das alles nachmachen musst.



  • 314159265358979 schrieb:

    Warum weigerst du dich, etwas neues zu lernen? Nur weil dein Professor/Lehrer/Buch schlecht ist, heißt das nicht, dass du das alles nachmachen musst.

    🙄



  • Aber da hat der Pi recht... ist gruseliger Code, den du uns da vorgestellt hast, das sollte es seit 10 Jahren nicht mehr in freier Wildbahn geben.



  • Hmm, also wenn du so ein Gefrikel und es ohne C++ Hilfen machen willst, was hälst du dann hiervon?

    #include <string>
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    int main()
    {
        string eingabe;
        cout << "Befehl eingeben: "  << endl;
        getline(cin,eingabe);
    
        char* zeichen = new char[eingabe.size()+1];
        strcpy(zeichen, eingabe.c_str());
    
        int erg=0;
        if(strstr(zeichen,"add"))
        {
            for(int i=3; i<=strlen(zeichen); ++i)
            {
                if(zeichen[i]>='0' && zeichen[i]<='9')
                    erg += zeichen[i]-'0';
            }
        }
        else if(strstr(zeichen,"sub"))
        {
            for(int i=3; i<=strlen(zeichen); ++i)
            {
                if(zeichen[i]>='0' && zeichen[i]<='9')
                    erg -= zeichen[i]-'0';
            }
        }
        cout << erg;
    
        //...
    }
    

    Aber irgendwie find ich das grausam, genauso wie das, das dein Prof. tut, sieht mir irgendwie nach C/C++ Gefrikel aus. Wurde aber bei uns auch so gelehrt, leider :(.



  • DocShoe schrieb:

    Aber da hat der Pi recht... ist gruseliger Code, den du uns da vorgestellt hast, das sollte es seit 10 Jahren nicht mehr in freier Wildbahn geben.

    Das sehe ich ja gerne ein
    Kann mit denn einer die Lösung zu der oben geschriebenen Fragestellung geben?



  • Gugelmoser schrieb:

    Hmm, also wenn du so ein Gefrikel und es ohne C++ Hilfen machen willst, was hälst du dann hiervon?

    #include <string>
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    int main()
    {
        string eingabe;
        cout << "Befehl eingeben: "  << endl;
        getline(cin,eingabe);
        
        char* zeichen = new char[eingabe.size()+1];
        strcpy(zeichen, eingabe.c_str());
        
        int erg=0;
        if(strstr(zeichen,"add"))
        {
            for(int i=3; i<=strlen(zeichen); ++i)
            {
                if(zeichen[i]>='0' && zeichen[i]<='9')
                    erg += zeichen[i]-'0';
            }
        }
        else if(strstr(zeichen,"sub"))
        {
            for(int i=3; i<=strlen(zeichen); ++i)
            {
                if(zeichen[i]>='0' && zeichen[i]<='9')
                    erg -= zeichen[i]-'0';
            }
        }
        cout << erg;
    
        //...
    }
    

    Aber irgendwie find ich das grausam, genauso wie das, das dein Prof. tut, sieht mir irgendwie nach C/C++ Gefrikel aus. Wurde aber bei uns auch so gelehrt, leider :(.

    ich danke dir erst mal und werde das später mal testen
    DANKE



  • nehme auch gerne LÖSUNGEN mit vectoren an...



  • #include <string>
    #include <iostream>
    #include <cstring>
    using namespace std; 
    
    int main()
    {
        string eingabe;
        cout << "Befehl eingeben: "  << endl;
        getline(cin,eingabe);
    
        char* zeichen = new char[eingabe.size()+1];
        strcpy(zeichen,eingabe.c_str()); 
    
        char* token = strtok (zeichen," ");
        char arr[10][4] = {}; // Die Größenangaben hier sind halt doof.
        for(int i=0; token!=NULL; ++i)
        {
            strcpy(arr[i], token);
            token = strtok (NULL," ");
            cout << arr[i] << endl;
        }
    
        // Jetzt hast alle Teile in arr stehen.
    }
    

    Und wie willst nun weiter machen? Soll man keine Vorzeichen eingeben können?



  • Eine Lösung mit vector hast du doch schon fast.



  • Das, was du uns am Anfang präsentiert hast, ist ein "downgrade" im wahrsten Sinne des Wortes:

    string eingabe; 
    
        //... 
    
        char* zeichen = new char[eingabe.size()+1]; 
        strcpy(zeichen, eingabe.c_str());
    

    Du "kennst" std::string, willst aber mit daraus gebastelten rohen Arrays vom Heap arbeiten... (Kopfschütteln)

    Außerdem: wenn du nach fertigen Lösungen suchst, dann bist du hier fehl am Platz. Wir können dir nur Ansätze anbieten und dir auf die Sprünge helfen. Danach ist es deine Aufgabe, daraus eine Lösung zu machen.



  • Gugelmoser schrieb:

    #include <string>
    #include <iostream>
    #include <cstring>
    using namespace std; 
    
    int main()
    {
        string eingabe;
        cout << "Befehl eingeben: "  << endl;
        getline(cin,eingabe);
       
        char* zeichen = new char[eingabe.size()+1];
        strcpy(zeichen,eingabe.c_str()); 
        
        char* token = strtok (zeichen," ");
        char arr[10][4]; // Die Größenangaben hier sind halt doof.
        for(int i=0; token!=NULL; ++i)
        {
            strcpy(arr[i], token);
            token = strtok (NULL," ");
            cout << arr[i] << endl;
        }
    
        // Jetzt hast alle Teile in arr stehen.
    }
    

    Und wie willst nun weiter machen? Soll man keine Vorzeichen eingeben können?

    man soll zB

    add 20 22
    

    eingeben
    dies soll dann berechnet werden (in dem fall add=addieren)
    die anzahl der zahlen soll variabel sein



  • Hilft dir das nun weiter was ich oder wer anders geschriebn hat? Kommst mit dem add sub mul... alleine klar?



  • Gugelmoser schrieb:

    Hilft dir das nun weiter was ich oder wer anders geschriebn hat? Kommst mit dem add sub mul... alleine klar?

    ich werde es versuchen

    VIELEN DANK SCHON MAL FÜR DIE MÜHE


Anmelden zum Antworten