Schulprojekt - Groß zu Kleinbuchstaben



  • Simon2 schrieb:

    ReggaeBoy schrieb:

    ...
    Ich weiß nicht wieso unser Lehrer das nicht mag, vielleicht weil wir es nicht gelernt haben....

    Ich vermute eher, dass das daran liegt, dass er es nicht gelernt hat. 😃

    glaube ich nicht. wenn er es nicht kennen würde, würde er es doch nicht verbieten?
    das hört sich mehr nach diesem schul-sadismus an, den sich manche lehrer gerne aneignen. (und dann rechtfertigen, so wie "ja, in der wirklichen welt, da habt ihr auch nicht immer solche annehmlichkeiten wie vorgefertigte string-klassen! ihr habt keine ahnung von der wirklichen welt!". oh ja, das kann ich mir sehr gut vorstellen)



  • queer_boy schrieb:

    ...wenn er es nicht kennen würde, würde er es doch nicht verbieten?...

    Naja, seit im vorvorvor...letzten Kurs mal einer diese Aufgabe mit std::string gelöst hat, weiß er, dass es das gibt.

    queer_boy schrieb:

    ...schul-sadismus ...

    DAS kommt vermutlich noch dazu.

    "Man hat etwas erst begriffen, wenn man es selbst mal nachgebaut hat !"
    "Warum dürfen wir dann C nutzen und fangen nicht mit ASM an ?"
    "***WTF***"

    Ich würde an der Stelle des OPs darauf bestehen, dass der Lehrer danach eine "richtige Lösung" (wie man es eben richtig in C++ machen würde) vorstellt - spätestens da zeigt sich dann, ob er keine Ahnung oder nur ein merkwürdiges didaktisches Konzept hat. 😃

    Gruß,

    Simon2.



  • nur anmerkungen.

    bool vergleich(char const* word, char const* DEorEN) //lies: zeiger auf konstante c-strings; du veränderst den inhalt ja nicht :)
    {
       int i = 0; //wozu brauchst du i? wird mir nicht ersichtlich
       int x = 0; 
       int y = 0;
       //eventuell aussagekräftigere namen verwenden.
    
       while(x<=(strlen(word))) {  //strlen selbst implementiert? wenn nicht, dann
                                   //reicht x < strlen(word)
          if(word[x] == DEorEN[x]) //du übersiehst, dass DEorEN an der stelle x 
                                   //nicht notwendigerweise einen inhalt haben muss. 
          {
             i++; //das ist die einzige stelle, wo du i verwendest?
          } else {
             y++; //warum nicht einfach mit break aus der schleife springen?
          }
          x++;				
       }
    
       //wenn es deinen lehrer nicht überfordert, kannst du 
       //auf dieses riesen-if-konstrukt verzichten und einfach
       //schreiben: return y == 0;
       if(y==0) {
          return true;
       } else { 
          return false;
       }
    }
    
    //kürzerer code ist meist aussagekräftiger.
    bool sind_gleich (char const* a, char const* b)
    {
       size_t len_a = strlen(a);
       size_t len_b = strlen(b);
       if (len_a != len_b) return false;
    
       for (int i = 0; i < len_a; ++i)
          if (len_a[i] != len_b[i]) return false;
    
       return true;
    }
    


  • @queer_boy

    Du hast sicher recht, jedoch sieht mein Code eher nach mir aus 😛

    Irgendwas muss ich ja aus dem Kopf geschrieben haben, ausserdem Funktioniert mein Code sehr gut 🙂

    lg ReggaBoy



  • Darfst du strlen denn nutzen? (implementiere es sonnst selbst:

    inline std::size_t strlen(const char* string)
    {
    	if (string == 0)
    		return 0;
    
    	size_t res = 0;
    	while (string[res])	++res;
    	return res;
    }
    

    🙂



  • std::size_t strlen(char const* string)
    {
        return *string == '\0' ? 0 : strlen(string + 1) + 1;
    }
    

    ... nur, um mal nen rekursiven Einzeiler ins Spiel zu bringen. 😉



  • Konrad Rudolph schrieb:

    std::size_t strlen(char const* string)
    {
        return *string == '\0' ? 0 : strlen(string + 1) + 1;
    }
    

    ... nur, um mal nen rekursiven Einzeiler ins Spiel zu bringen. 😉

    Was passier, wenn einer nen NULL-Zeiger übergibt ?
    Aber trotzdem nice 🙂



  • hmm ne keine Rekursion ^^ mag i net ... aber sonnst nice 🙂



  • KasF schrieb:

    Konrad Rudolph schrieb:

    std::size_t strlen(char const* string)
    {
        return *string == '\0' ? 0 : strlen(string + 1) + 1;
    }
    

    ... nur, um mal nen rekursiven Einzeiler ins Spiel zu bringen. 😉

    Was passier, wenn einer nen NULL-Zeiger übergibt ?
    Aber trotzdem nice 🙂

    normal is '\0'==0, also tut sich das nix.



  • otze schrieb:

    KasF schrieb:

    Konrad Rudolph schrieb:

    std::size_t strlen(char const* string)
    {
        return *string == '\0' ? 0 : strlen(string + 1) + 1;
    }
    

    ... nur, um mal nen rekursiven Einzeiler ins Spiel zu bringen. 😉

    Was passier, wenn einer nen NULL-Zeiger übergibt ?
    Aber trotzdem nice 🙂

    normal is '\0'==0, also tut sich das nix.

    Stimmt. Aber da ist die 0 kein Nullzeiger, sondern ne integrale Konstante.

    *string == '\0'
    

    Das Ding könnte einen Nullzeiger dereferenzieren und dann machts buum.

    strlen(0);  :warning:
    

    Jaja die alten guten char*'s 🙂



  • (D)Evil schrieb:

    hmm ne keine Rekursion ^^ mag i net ... aber sonnst nice 🙂

    Ich auch nicht 😃 ... ist doch auch langsamer als Iteration 😉 .



  • otze schrieb:

    ...normal is '\0'==0, also tut sich das nix.

    Oha, böser Flüchtigkeitsfehler !!
    Schau Dir nochmal den Code an unter der Frage "Was passiert, wenn die Funktion mit 0 aufgerufen wird ?":

    std::size_t strlen(char const* string)
    {
        return *string == '\0' ? 0 : strlen(string + 1) + 1;
    }
    

    "Nichts passieren" dürfte nicht im Pool möglicher Verhaltensweisen liegen. 😉

    Gruß,

    Simon2.


  • Mod

    Simon2 schrieb:

    Oha, böser Flüchtigkeitsfehler !!

    Schon mal gefragt, wie sich die Funktion strlen der Standardbibliothek mit NULL-Pointern verhält? Auf NULL zu prüfen impliziert, dass NULL ein gültiges Argument ist - und das ist eine Frage der Spezifikation.



  • Simon2 schrieb:

    otze schrieb:

    ...normal is '\0'==0, also tut sich das nix.

    Oha, böser Flüchtigkeitsfehler !!

    ich geh mich mal schämen 😮. Alter falter war das offensichtlich, Ich sollte nurnoch auf template fragen antworten 🙄



  • camper schrieb:

    Simon2 schrieb:

    Oha, böser Flüchtigkeitsfehler !!

    Schon mal gefragt, wie sich die Funktion strlen der Standardbibliothek mit NULL-Pointern verhält? Auf NULL zu prüfen impliziert, dass NULL ein gültiges Argument ist - und das ist eine Frage der Spezifikation.

    Ich meinte nicht, dass eine "fehlende" NULL-Prüfung ein Flüchtigkeitsfehler sei, sondern otzes Schluss, sie sei "implizit vorhanden" (da man ja auch '\0' prüft).
    Da hat er halt die Dereferenzierung übersehen (und da ich sehr sicher bin, dass er das eigentlich locker draufhat, bezeichnete ich das als "Flüchtigkeitsfehler").

    Zur "Existenz der NULL-Prüfung" selbst stehe ich genauso wie Du.

    Gruß,

    Simn2.


Anmelden zum Antworten