Schulprojekt - Groß zu Kleinbuchstaben
-
Ich weis nicht, wie ihr darauf kommt, dass es portabel sein soll. aber davon steht doch gar nichts
-
portabel bedeutet in diesem fall standardkonform, also nicht abhängig von irgendwelchen rechnerarchitekturen. es würde nicht nur von unglaublicher ignoranz sein, irgendeinen nicht-portablen code hier zu posten, weil (1) der OP nichts davon gesagt hat, auf welcher rechner-architektur er dieses programm schreiben muss, (2) er (der OP) sein posting extra im ISO C++ forum gestellt hat und damit impliziert, dass er das haben will. schlimmer noch: alle hinweise, die wir bekommen, deuten darauf hin, dass er ASCII nicht zur verfügung hat. nämlich das, was ich unter (2) gesagt habe, dann dass er keinen std::string, keine anderen eingebauten funktionen verwenden darf (viele embedded c++ lösungen entbehren das, um lighter zu sein), ebenso wie dass er das ganze für einen schulcomputer implementieren muss - und wir wissen alle, mit welcher (alten, vormodernen) hardware manche schulen ausgestattet sind (abgesehen davon, dass er das ganze auch absichtlich für uralt-computer machen könnte).
kurz: alles deutet darauf hin, dass er eine portable, standardkonforme lösung wollte - nichts dagegen. es wäre also ziemlich dumm, keine zu liefern. alles andere hätte der OP sagen müssen. und wenn du trotzdem denkst, dass er das nicht portabel wollte sondern maschinenspezifisch, dann ist das nicht gerade höflich gegenüber dem OP.
-
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
-
-
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; }
-
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.