Aufgaben aus der Schule; char [gelöst]



  • Oder aber- was ich für wahrscheinlicher halte- der Weg soll das Ziel sein und nicht die Verwendung möglichst einfacher Klassen/Funktionen.
    Ich gehe davon aus, dass eine strncat-Funktion selber geschrieben werden soll.



  • Was du lernen musst ist, dass die char-Arrays, die du verwendest ("char meinArray[50]"), nicht den String-Typen anderer Sprachen entsprechen. Daher kannst du die auch nicht einfach addieren.

    char a[20];  //das sind Arrays vom Typ char
    char b[20];  //
    char c[50];  //
    
    a="Hallo "; //geht nicht!
    
    strncpy(a,"Hallo ",20);  //klappt schon besser!
    strncpy(b,"Welt!",20);
    
    c=a+b;  //Nö... hier würdest du nicht die Inhalte/Strings von a+b addieren, 
            //sondern deren Adressen (schlag vielleicht mal array-to-pointer-decay nach)
            //Daher gibt's hier auch einen Fehler (du kannst 2 Zeiger nicht addieren)
    
    _snprintf(c,50,"%s%s",a,b);  //schon besser. Hier werden die Strings, auf die
                                 //a und b zeigen, in c zusammengeführt.
    


  • Und dann noch was hierzu:

    gesamt == vorname && name;
    

    Sorry, aber das ist so falsch, wie es nur sein kann! 😃 😉

    Du hast wohl krampfhaft versucht, die Compiler-Fehler wegzubekommen. Aber "==" ist der Vergleichsoperator, nicht der Zuweisungsoperator. Und "&&" ist ein logisches Und, kein Addieren oder Zusammenführen, wie du es vorhattest.

    Du bildest hier einfach ein boolsches Ergebnis, dass nicht weiter ausgewertet wird. Genauso hättest du auch eine solche Zeile notieren können:

    1;
    

    😉



  • wie gesagt, programmieren in einer FISI Ausbildung stößt fast überall (auch bei mir) auf unverständnis.

    Um jetzt zu den string-lösungen zu kommen die erwähnt wurden.
    Ich sagte meinem Lehrer schon das es so meiner Meinung nach schrott ist.
    (Aber der schreibt auch Widerstand mit "ie")

    Frage ist jetzt wie ich das Programm funktionsfähig UND richtig codiere.
    Bin für den restlichen Tag jetzt unterwegs, lasst euch also ruhig Zeit mit den Antworten.

    Lg und danke für die bisheringen Posts



  • Shruikan schrieb:

    Frage ist jetzt wie ich das Programm funktionsfähig UND richtig codiere.
    Bin für den restlichen Tag jetzt unterwegs, lasst euch also ruhig Zeit mit den Antworten.

    Eine Möglichkeit habe ich dir schon gezeigt. Die Frage ist eher, was genau du machen sollst. Wenn lediglich die Datentypen (char-Array) und das Ziel definiert sind, kannst du mit meiner Methode arbeiten (eine Alternative wäre noch strncat statt _snprintf). Wenn - wie schon vermutet wurde - ein strcat/strncat nachprogrammiert werden soll, musst du das bitte sagen.



  • strncat und snprintf sagt mir beides NICHTS, sorry.

    Aufgabenstellung unseres Lehrers lautet wortgemäß
    "Codiere ein Programm bei dem Vorname und Nachname in jeweils einer eigenen char Variable abgespeichert werden. Für die Ausgabe sollen die Werte aus den beiden chars in eine dritte char kopiert werden"

    Wir haben daraufhin in der Schule schonmal nach einem befehl wie "copy" gesucht, aber nichts gefunden. Also muss die Lösung anders aussehen.

    Hoffe das gibt jetzt aufschluss.
    LG



  • Shruikan schrieb:

    Aufgabenstellung unseres Lehrers lautet wortgemäß
    "Codiere ein Programm bei dem Vorname und Nachname in jeweils einer eigenen char Variable abgespeichert werden. Für die Ausgabe sollen die Werte aus den beiden chars in eine dritte char kopiert werden"

    Ich hoffe, dass das nicht wirklich "wortgemäß" widergegeben ist. Bringt euch der Hausmeister programmieren bei? 🙂



  • Shruikan schrieb:

    strncat und snprintf sagt mir beides NICHTS, sorry.

    CSpilles Links gesehen?

    Shruikan schrieb:

    Aufgabenstellung unseres Lehrers lautet wortgemäß
    "Codiere ein Programm bei dem Vorname und Nachname in jeweils einer eigenen char Variable abgespeichert werden. Für die Ausgabe sollen die Werte aus den beiden chars in eine dritte char kopiert werden"

    Mein Beileid. Wenn jemand einen String als "char-Variable" bezeichnet, lässt das schon mal stark an seiner Kompetenz zweifeln.



  • wortgemäß, wie gesagt.
    (auf die idee das er in wahrheit nur der hausmeister ist sind wir noch nicht gekommen wir haben bisher immer anderes getippt.



  • Wenn du konfrontativ sein willst, sagst du ihm, dass man in einer char-Variable nur ein einziges Zeichen speichern kann und deshalb die Aufgabe nicht lösbar ist.
    Zumindest nicht für übliche Namen.



  • konfrontativ spare ich mir lieber, habe dies jahr schon statt 3 ne 4 bekommen 😃
    heißt also ich müsste strings verwenden um die aufgabe zu lösen?

    habe jetzt mal zwei beispiele aus besagten Links ausprobiert, aber die sind beide auch mit strings.

    ich denke ich werd das erstmal so an den guten mann weitergeben.
    Lösung wie er sie sich vorstellt werd ich danngerne hier posten.

    (vielleicht meinte er ja strings und sagte char)

    wird jedenfalls nicht mein letzter Beitrag hier sein.
    Bis zum nächsten Problem dann.



  • Überall in der Schule gesucht und nirgendwo ein Copy gefunden? (Tipp: der Lehrer hat es in der Schublade vom Pult eingesprerrt.)

    Spatz beiseite: mach Dir Dein char-Arry-Copy doch selber:

    char vorname[20];
    char nachname[20];
    char name[42];
    
    // Einlesen ...
    cin >>...
    
    // Konkatenieren
    
    int pos_name=0;
    
    for(int pos_vn=0; vorname[pos_vn]!=0 && pos_vn<20; ++pos_vn)
      name[pos_name++]=vorname[pos_vn];
    
    name[pos_name++]=' '; //Leerzeichen dazwischen
    
    for(int pos_nn=0; nachname[pos_nn]!=0 && pos_nn<20; ++pos_nn)
      name[pos_name++]=nachname[pos_nn];
    
    name[pos_name]='0'; // Vorsicht in der Porzellankiste
    

    Sicher nicht die schönste Lösung, aber sollte grob tun 😉
    Angestrebter Lerneffekt: Strings als Null-terminierte Char-Arrays (klassische C-Strings) selbst verwurschdeln.

    Zusatzaufgabe für Übermotivierte: Zeiger-Arithmetik statt Feld-Indizes verwenden!



  • hm, dafür das der post nicht lang ist hast du es geschafft mich während der geschätzen minute die ich zum lesen brauchte komplett zu verwirren 😃

    heißt das (übersetzt für alle wie mich) das ich einen copy befehl selbst erstellen könnte wenn ich den code aus deinem post entnehme?



  • Shruikan schrieb:

    hm, dafür das der post nicht lang ist hast du es geschafft mich während der geschätzen minute die ich zum lesen brauchte komplett zu verwirren 😃

    lol ja bei solchen kommentaren

    löl schrieb:

    //Konkatenieren
    //Vorsicht in der Porzellankiste

    kein wunder 😃



  • evtl mal eine variante mit strcat

    char vorname[]="vorname";
    char nachname[]="nachname";
    char name[42]={0};
    
    strcat(name,vorname);
    strcat(name," ");
    strcat(name,nachname);
    
    cout << name << endl;
    

    ist zwar viel? langsamer aber dafür kürzer



  • Paulomat schrieb:

    Zusatzaufgabe für Übermotivierte: Zeiger-Arithmetik statt Feld-Indizes verwenden!

    jipee 😋

    char vorname[20];
    char nachname[20];
    char name[42];
    
    char *pvorname = vorname;
    char *pnachname = nachname;
    char *pname = name;
    
    while((*pname++ = *pvorname++));
    
    *pname++ = " ";
    
    while((*pname++ = *pnachname++));
    
    *pname = "\0";
    


  • cppAnfängerÜbermotiviert schrieb:

    Paulomat schrieb:

    Zusatzaufgabe für Übermotivierte: Zeiger-Arithmetik statt Feld-Indizes verwenden!

    jipee 😋

    char vorname[]="vorname";
    char nachname[]="nachname";
    char name[42]={0};
    
    char *pvorname = vorname;
    char *pnachname = nachname;
    char *pname = name;
    
    //alles inkl. '\0' kopieren
    while((*pname++ = *pvorname++));
    
    //'\0' durch ' ' ersetzen
    *--pname = ' ';
    
    //den rest inkl. '\0' kopieren
    while((*++pname = *pnachname++));
    

    hoffe jetzt stimmts 😞



  • hack_ab_die_hand schrieb:

    cppAnfängerÜbermotiviert schrieb:

    Paulomat schrieb:

    Zusatzaufgabe für Übermotivierte: Zeiger-Arithmetik statt Feld-Indizes verwenden!

    jipee 😋

    char vorname[]="vorname";
    char nachname[]="nachname";
    char name[42]={0};
    
    char *pvorname = vorname;
    char *pnachname = nachname;
    char *pname = name-1;
    
    //alles inkl. '\0' kopieren
    while((*++pname = *pvorname++));
    
    //'\0' durch ' ' ersetzen
    *pname = ' ';
    
    //den rest inkl. '\0' kopieren
    while((*++pname = *pnachname++));
    

    hoffe jetzt stimmts 😞

    jetzt noch bischen unrollen und fertig ist der porsche 😋



  • char nachname[] = "schroeder";
    char vorname[] = "kartoffel";
    *(nachname-1) = ' ';
    
    std::cout << vorname << std::endl;
    

    Undefiniert aber kürzer. :p



  • @Shruikan schau weg 😃
    @Fellhuhn 😋


Anmelden zum Antworten