Aufgaben aus der Schule; char [gelöst]



  • Ü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 😋



  • Meine Güte, das ist ja gemeingefährlich. Nachher nimmt das noch jemand ernst! 😮



  • Fellhuhn schrieb:

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

    Undefiniert aber kürzer. :p

    Hehe, ich kann nicht mehr... 😃



  • 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 😃

    Bitte schön, gern geschehen.

    Shruikan schrieb:

    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?

    Latürnich. Dafür sind Allzweck-Programmiersprachen ja gedacht. Mit C/C++ kannst Du so ziemleich alles selbst machen. Bequemer und schneller (und meist auch korrekter) sind natürlich Bibliothekem mit fertigem Code. Aber den hat ja auch mal jemand erstellt (meist in C/C++).

    Nur für sehr hardware-nahe Magie braucht man evtl. manchmal Assembler (wenn man low-level Zeug für OS/Treiber schreibt, dass direkt irgendwelchen speziellen CPU-Register/Features benutzt - siehe PrettyOS Projekt & -Tutorial im OS Forum!)



  • guten morgen und besten dank.
    habe mich vor zwei minuten eingestempelt...rechner an...forum lesen. BOOM

    "Shruikan schau weg"

    Ich werd gleich die neuen Lösungsansätze die hier geschrieben wurden ausprobieren und sehen was daraus wird.
    Werde sobald ich ein lauffähiges Programm auf die beine gestellt habe werd ich es hier stolz verkünden.

    vorab erstmal wieder danke für die vielen denkanstöße (und den ein oder anderen lacher)

    lg



  • !!!!!!!

    Habe es geschafft!
    Es gibt noch Wunder. Der Lösungsansatz von cpp_anfänger hat auf anhieb hingehauen.
    War der erste Code-Schnipsel den ich getestet habe und der hat gepasst.

    Damit wäre mein Problem erledigt. Danke euch allen für die zahlreichen Ideen und die schnelle Hilfe.

    Wir sehen uns dann beim nächsten Problem wieder.
    Letzte Frage noch, wie ist das hier mit Beiträge closen? Muss ich das machen oder übernehmen das die Mods?



  • Shruikan schrieb:

    Letzte Frage noch, wie ist das hier mit Beiträge closen? Muss ich das machen oder übernehmen das die Mods?

    Brauchst du nicht. Pack einfach ein "[gelöst]" oder so in den Threadtitel.


Anmelden zum Antworten