Ich weiß nicht mehr weiter ..



  • Hallo,
    könnt ihr mir vieleicht bei einen Problem helfen ?
    Das ist der Code :

    //Header
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    
    using namespace std;
    
    //Variablen
    char Code [1024];
    char delimiter [] = " " ;
    char *Token;
    string Assambler ;
    
    //Main
    
    int main ()
    {
    	cin.getline(Code,1024,'%');
    
    	Token = strtok(Code, delimiter);
    	if (Token == "nop")
    	{
    		string nop = "0000";
    		Assambler = Assambler + nop ;
    	}
    	while (Token != NULL)
    	{
    		Token = strtok(NULL, delimiter);
    	}
    	cout << Assambler << endl;
    	cin.get();
    
    }
    

    und wenn ich zb nop eingieb sollte eine 0000 am ende ausgegeben werden. Aber das tut es nicht .. ich arbeit schon seit einer stunde am problem habs aber noch nicht gelöst ..



  • #include <iostream>
    #include <string>
    #include <strstream>

    using namespace std;

    int main ()
    {
    #if 1 //zum testen
    istrstream cin(R"(
    nop
    mov 3 4
    nop
    end
    )");
    #endif
    string code;
    while(cin>>code){
    if(code=="nop"){
    cout<<"0000";
    }
    if(code=="end"){
    return 0;
    }
    if(code=="mov"){
    string src,dst;
    cin>>src>>dst;
    cout<<"0034 "<<src<<' '<<dst;
    }
    ' ';
    }
    }



  • Was vergleichst du hier? (das ist dein Problem, also erst denken, dann antworten)

    if (Token == "nop")
    


  • manni66 schrieb:

    Was vergleichst du hier? (das ist dein Problem, also erst denken, dann antworten)

    if (Token == "nop")
    

    ob das was ich eingegeben hab == nop ist



  • Und warum gibt es dann eine Funktion strcmp, die - nach deiner Ansicht - dann genau dasselbe macht?



  • Nathan schrieb:

    Und warum gibt es dann eine Funktion strcmp, die - nach deiner Ansicht - dann genau dasselbe macht?

    weil ich diese funktion grad zum ersten mal hör ? aber danke .



  • i516alu schrieb:

    weil ich diese funktion grad zum ersten mal hör ? aber danke .

    Du vergleichst hier die Adresse des ersten Zeichens in deinem Code-Array mit der des ersten Zeichens in "nop". Die können niemals gleich sein.
    In C++ gibt es dafür std::string, in C strcmp.



  • Nathan schrieb:

    Und warum gibt es dann eine Funktion strcmp, die - nach deiner Ansicht - dann genau dasselbe macht?

    Ja, und warum gibt es string::append(..., wenn doch Operator + für string überladen ist?
    Und warum gibt es string::length(), wenn doch string::size() - nach deiner Ansicht - dann genau dasselbe macht?



  • Diese Dinge machen das gleiche, aber der Operator == und strcmp unterschiedliche Dinge!
    Mit append kann man außerdem genauer spezifizieren, was hinzu gefügt werden soll.
    Mein Post war eher dazu gedacht, den TE darauf aufmerksam zu machen, dass er einen Fehler gemacht hat und ihn evtl. daran zu erinnern, dass man C-Strings nicht mit == vergleichen kann.



  • Deine Argumentation " ... warum gibt es das wohl, wenn es doch schon jenes gibt ..." war einfach nicht zielführend.



  • Belli schrieb:

    Nathan schrieb:

    Und warum gibt es dann eine Funktion strcmp, die - nach deiner Ansicht - dann genau dasselbe macht?

    Ja, und warum gibt es string::append(..., wenn doch Operator + für string überladen ist?

    Weil a+b nicht das selbe wie a.append(b) ist.

    und wgeen size vs length: weil da unterschiedliche Konventionen abgedeckt werden sollten. Würde ich aber auch als defekt deklarieren.



  • otze schrieb:

    Weil a+b nicht das selbe wie a.append(b) ist.

    Er meinte += . Und push_back() gibts ja auch noch. Die sind zwar alle ein bisschen anders überladen, aber dennoch gehts bei allen drei ums Anhängen.

    Allerdings sind Methoden wie find_last_not_of() um einiges fragwürdiger 😉


Anmelden zum Antworten