Frage wegen einfachem Game!
-
weil du die variable sterne nicht initialisierst bzw kein Stringendezeichen nach deinen * einfügst...
-
So!
Das habe ich auch beseitigt!Nur noch ein einziges Problem!
Ich habe es geschafft eigentlich alles einzubauen, aber mein problem ist noch, dass ich nicht klarkomme damit, wenn es mehr als 2 gleiche buchstaben gibt, denn dann sucht er nur das erste und das letzte (wegen strchr & strrchr) und ersetzt die * durch die richtigen Buchstaben!
Ich hab alles probiert, aber diesmal komm ich nicht zurecht irgendwie!
Wie kann ich machen, dass er nach der ersten im übriggebliebenen nach weiteren solchen buchstaben sucht und immer so weiter, bis er nix findet. Dann ersetzt er gesamt alle richtigen positionen und setzt statt stern überall den buchstaben ein???Wie mache ich das?
Viele Wörter oder Sätze haben mehr als zwei gleiche Zeichen!Bitte diesmal mit Beispiel!
DANKE!
-
Ach ja, hier der Teil des Codes wie ich es derweil mache!
pointer=strrchr(Wort,buchstabe); if(pointer!=NULL) { int lang2,langganz; lang2=strlen(pointer)-1; langganz=lang-lang2; sterne[langganz]=Wort[langganz]; } pointer2=strchr(Wort,buchstabe); if(pointer2!=NULL && pointer2!=pointer) { int lang2,langganz; lang2=strlen(pointer2)-1; langganz=lang-lang2; sterne[langganz]=Wort[langganz]; } printf("\n%s\n",sterne);
-
Ich habs dir in meinem post eigentlich schon beschrieben, aber hier ein kleiner Codeschnipsel:
pointer = Wort; counter = 0; while((pointer = strchr(pointer,Buchstabe))) { counter++; // Zaehlt die Stelle im Wort, muss vor while natürlich mit 0 initialisiert werden pointer++; // Naechster Buchstabe, denn den jetzigen haben wir schon gefunden // Sterne setzen etc..... }
So und in der Schleife kannst du nun deine Buchstaben und Sterne setzten, dank counter weißt du an welcher Stelle deiner Arrays..
Ich denke das sollte helfen
-
Soweit ich verstanden habe, was du erreichen willst, würde ich dies so machen:
pointer = strchr(Wort,buchstabe); while( pointer ) { sterne[pointer-Wort] = *pointer; pointer = strchr(pointer+1, buchstabe); }
-
Danke euch beiden!
Besonders Wutz´s Beitrag war sehr verblüffend, aber ich habe schon mitbekommen, dass du das professionell machst!Eine kurze Fragen, wenn es keine Umstände macht:
Könntest du mir erklären was du ungefähr gemacht hast da in diesen paar Zeilen!
Bin irgendwie verwirrt!
-
/* setze Zeiger auf 1.Vorkommen von <buchstabe> in <Wort> */ pointer = strchr(Wort,buchstabe); /* wenn Position vorhanden... */ while( pointer ) { /* pointer zeigt hier auf Position des gefundenen Buchstaben ermittle den Abstand der Position vom Beginn des Strings <Wort> setze in <sterne> in gleichem Abstand den Inhalt des Zeigers (Zeigerinhalt ist zu diesem Zeitpunkt == <buchstabe>) */ sterne[pointer-Wort] = *pointer; /* setze Zeiger auf nächstes Vorkommen von Buchstabe NACH aktueller Position */ pointer = strchr(pointer+1, buchstabe); }
-
sterne[pointer-Wort] = *pointer;
Diese Zeile ist mir schleiferhaft!
Wenn doch eine Position, also eigentlich ein Zahlenwert in sterne[] stehen sollte, wie kann dann "pointer-Wort" drinnen stehen.
Welche Werte haben diese beiden, und wäre der dann nicht negativ, da Wort ja das gesamte Wort sit und pointer nur ein Ausschnitt?
Oder steh ich jetzt auf der Leitung?!
-
sterne[pointer-Wort] = *pointer;
<pointer-Wort> ergibt die Position/Abstand von <pointer> zum Zeiger auf <Wort>.
Zeiger auf Wort bedeutet einfach den Beginn der Zeichenkette <Wort>, für "Emil" und buchstabe == 'i' ergibt sich also pointer-Wort == 2.
pointer zeigt also auf Wort[2], d.h. pointer==&Wort[2].
Jetzt wird nur noch sterne[2] auf <buchstabe> gesetzt, dennsterne[pointer-Wort] = *pointer;
entspricht genau
sterne[pointer-Wort] = buchstabe;
da
*pointer == buchstabe
ist.
-
Habs verstanden!
Wort steht einfach nur für den Anfang des gesamten Wortes, also eigentlich 0.
Das heißt [pointer-Wort] ist eigentlich nur pointer als Wert sozusagen!Ich denke ich habs jetzt!
DANKE AN ALLE!
Wollte ja nicht nur, dass es funktioniert, sondern es auch verstehen!