Schulprojekt - Groß zu Kleinbuchstaben



  • queer_boy schrieb:

    vor allem die funktion, um deine C-strings (aka NTBS) richtig (lexikographisch) zu ordnen, wird schwer portabel zu implementieren sein...

    ersteinmal: sehr schöne Lösung. Allerdings musst du AÖÜ draussen lassen, da diese zeichen nicht von den 96 Standardzeichen abgedeckt werden.

    zum Glück ist es nicht teil der Aufgabe, richtig zu sortieren, der TE soll laut eigener angabe nur zu einem deutschen wort das englische finden(bzw umgekehrt) und ausgeben. und da reicht die normale sortierung aus.



  • ReggaeBoy schrieb:

    .. muss für die Schule ein C++ Projekt machen ..

    und

    ReggaeBoy schrieb:

    - Keine Strings (nur Char Arrays)

    Dummerweise ist das hier kein Einzelfall. Nein - ich versuche jetzt nicht die Vorteile von std::string gegenüber char-Arrays aufzuzählen. Nur soviel: Wir machen bei uns in der Firma Einstellungstests und lassen die Probanden kleine C++-Programme schreiben.

    Wer mit std::string umgehen kann, wird eingestellt. Wer char-Arrays benutzt nicht.
    Lieber ReggaeBoy, erzähl das bitte Deinem Lehrer.

    Gruß
    Werner



  • @Werner: Gute Antwort ! 👍 😃

    Gruß,

    Simon2.



  • Hey,

    Danke für die vielen und vorallem schnell Anworten.

    Ich weiß nicht wieso unser Lehrer das nicht mag, vielleicht weil wir es nicht gelernt haben. 🙂
    Ich habe auch C++ nicht richtig bei ihm gelernt. 😉

    Naja, wie auch immer, ich habe ein paar Codes ausprobiert und sie funktionieren so wie ich es will. Ich habe mir aber jetzt aber folgendes überlegt:

    Ich habe eine Suchfunktion die jedes Zeichen eines eingegebenen Wortes mit Wörter aus einer Textdatei vergleicht. Hier mal der Code:

    bool vergleich(char word[50], char DEorEN[50])
    {
    	int i = 0;
    	int x = 0;
    	int y = 0;
    
    		while(x<=(strlen(word))) {
    				if(word[x] == DEorEN[x])
    				{
    					i++;
    				} else {
    					y++;
    				}
    
    			x++;				
    		}
    
    		if(y==0) 
    			{
    				return true;
    			} else { 
    				return false; 
    			}
    }
    

    Nun möchte ich aber das bei diesem Vergleich die Groß-Kleinschreibung nicht beachtet wird, hat da jemand vielleicht eine Idee?

    lg ReggaeBoy



  • Jabadabaduu 🙂

    Ich habs gerade selber geschrieben, war ziemlich einfach.

    lg ReggaeBoy



  • 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. 😃
    Alternativ möchte er Euch "Container-Handling" und ein wenig "Schleifendenke" beibringen ... aber IMO wäre er mit int[] da besser beraten.

    ReggaeBoy schrieb:

    Jabadabaduu 🙂

    Ich habs gerade selber geschrieben, war ziemlich einfach.

    lg ReggaeBoy

    👍 😋
    Glückwunsch !!!

    So ist es am Besten.

    Gruß,

    Simon2.



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


Anmelden zum Antworten