hame Geschrieben 7. Dezember 2009 Teilen Geschrieben 7. Dezember 2009 hallo, hab ein kleines problem mit dem thema strings und arrays. wie zähle ich ein bestimmtes zeichen in einer zeichenkette und geb sie danach aus? also wenn ich einen bestimmten string übergeben bekomme, die häufigkeit der buchstaben angeben. wäre für einen ansatz sehr dankbar. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DFens Geschrieben 7. Dezember 2009 Teilen Geschrieben 7. Dezember 2009 Also, da ich nicht in C oder C++ programmiere versuch ichs mal im Pseudo-Code. Ersteinmal brauchst du die Länge des Strings, danach musst du jeden einzelnen Buchstaben untersuchen, mit ner Schleife (z.B. wenn der Buchstabe "a" im s tring vorkommt zähler = zähler + 1) So würde ich das machen, geht bestimmt auch leichter . Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
hame Geschrieben 7. Dezember 2009 Autor Teilen Geschrieben 7. Dezember 2009 also ich habs schon geschafft die zeichen zusammen zu addieren und und die Anzahl der zeichen auszugeben. ich hab auch ungefähr die schleife dafür die ich brauche um den den string zu durchlaufen. meine frage ist nun ob ich die zeichen in ein array speichern muss vorher bevor ich sie dann über den index abrufe. das funzt nicht so ganz?! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. Dezember 2009 Teilen Geschrieben 7. Dezember 2009 das funzt nicht so ganz?! Soll das eine Frage oder eine Aussage sein? Wie auch immer, als Fehlerbeschreibung ist es ungeeignet. Zeig deinen Code und dazu die Fehlermeldung, falls vorhanden. Wenn nicht, dann beschreib sowohl das erwünschte als auch das beobachtete Verhalten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
hame Geschrieben 7. Dezember 2009 Autor Teilen Geschrieben 7. Dezember 2009 vlt. gehts so einfacher main(int argc, char * argv[]){ int i; char string[200]; int anzahl; int len; printf("bitte etwas eingeben: \n"); //nur buchstaben im string// fgets(p,sizeof(p),stdin); len = strlen(p); for(index=anzahl=0; index<len; index++) { if (string >= 'A' && string <= 'Z' || string >= 'a' && string <= 'z') anzahl++; } printf("%i mal", anzahl, *****); //bei ***** soll der bestimmte buchstabe stehn // return 0; } wie mache ich das am besten ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
hame Geschrieben 7. Dezember 2009 Autor Teilen Geschrieben 7. Dezember 2009 was heißt erwünschtes verhalten.... Ich würde gerne wissen wie ich den abgesuchten buchstaben speicher. Und dann zu der Häufigkeit des Buchstabens über den Index ihn wieder ausgebe das wäre alles. Also dann alle buchstaben halt die in dem string vorkommen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. Dezember 2009 Teilen Geschrieben 7. Dezember 2009 bei ***** soll der bestimmte buchstabe stehnWelcher "bestimmte Buchstabe"? Du zählst ja gar keinen bestimmten Buchstaben, du zählst alle Buchstaben zusammen. Wenn du einen bestimmten Buchstaben zählen willst, dann entscheide dich für einen. Wenn du jeden Buchstaben zählen willst, reicht offensichtlich ein einzelner Zähler nicht aus. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
hame Geschrieben 7. Dezember 2009 Autor Teilen Geschrieben 7. Dezember 2009 das ist mir schon klar das ich alle buchstaben hier zähle. aber ich kann doch nicht 26 zähler initialisieren um alles abzuklappern?! es gibt doch sicherlich eine schönere lösung. ich brauch doch sicherlich ein array?! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. Dezember 2009 Teilen Geschrieben 7. Dezember 2009 es gibt doch sicherlich eine schönere lösung. ich brauch doch sicherlich ein array?!Ein Array von 26 ints sollte schon helfen. Für die Adressierung ein Tipp: Wenn du von einem char, das einen Großbuchstaben enthält, den Wert 'A' abziehst, erhältst du einen Wert zwischen 0 und 25, der sich prima als Index auf ein Zähl-Array verwenden lässt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
hame Geschrieben 7. Dezember 2009 Autor Teilen Geschrieben 7. Dezember 2009 danke für den tipp mir ist jetzt eigentlich nur eins wichtig und zwar das verständis weil ich bei arrays total versage. Und zwar wenn ich das int array anlege muss ich es dann mit {'a','b','c'...'A','B',C'} initialisieren. mir ist auch die Groß-und Kleinschreibung ziemlich egal. mir gehts einfach nur ums Verständnis. ich hab nämlich bis jetzt immer mein index mit der anzahl des arrays intitialisiert und bin dann immer von vorn nach hinten bzw von hinten nach vorne durch gegangen ohne ein zweites array. ich hoffe du verstehst was ich meine. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 8. Dezember 2009 Teilen Geschrieben 8. Dezember 2009 Und zwar wenn ich das int array anlege muss ich es dann mit {'a','b','c'...'A','B',C'} initialisieren.Nein, das ist Quatsch. Du versuchst, eine Beziehung zwischen den Arrayelementen und dem, was sie zählen sollen, herzustellen, aber das ist gar nicht notwendig. In den Arrayelementen sollen doch hinterher die Anzahlen der einzelnen Buchstaben stehen. Für welchen Buchstaben welches Arrayelement steht, brauchst du nicht in irgendwelchen Variablen zu speichern, das ergibt sich schon aus der Position im Array: Das erste Element steht für A usw. Damit sollte auch klar sein, wie du dein Array initialisieren musst. Stell dir einfach vor, was drinstehen soll, wenn du ein Wort eingibst, das keine Buchstaben enthält. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
hame Geschrieben 8. Dezember 2009 Autor Teilen Geschrieben 8. Dezember 2009 ahhh ok, jetzt versteh ichs, danke. aber ich könnte auch theoretisch wenn ich alle zeichen im string prüfen will mir ein array von 256 elementen alegen und dann über die den asci code das zeichen in ein int umwandeln und danach zählen und ausgeben? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 8. Dezember 2009 Teilen Geschrieben 8. Dezember 2009 aber ich könnte auch theoretisch wenn ich alle zeichen im string prüfen will mir ein array von 256 elementen alegen und dann über die den asci code das zeichen in ein int umwandeln und danach zählen und ausgeben?Ja, das wäre möglich. Es gibt da aber einen Stolperstein: Bei den meisten Compilern ist char vorzeichenbehaftet, der Wertebereich geht also von -128 bis +127. Das ist als Arrayindex natürlich nicht so toll. Deswegen sollte man den char in unsigned char umwandeln, bevor man ihn als Index benutzt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
hame Geschrieben 8. Dezember 2009 Autor Teilen Geschrieben 8. Dezember 2009 (bearbeitet) int wert[25], index; char string[200]; for(index=0;index<25;index++) if(p[index] >='a' && p[index] <='z'){ wert[index] =string[index]; printf("%i mal %c\n", index, wert[index]); index++; } ich hab die andere variante weggelassen^^ kannst du mir hier vlt. nochmal helfen und zwar wird die anzahl der buchstabe nicht richtig gezähl und zugewiesen. was ist an meiner schleife falsch? irgendwie zählt er nur den index hoch aber nicht nicht die buchstaben. musste gerade feststellen, dass der algorithmus total falsch ist :/ Bearbeitet 8. Dezember 2009 von hame Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
hame Geschrieben 8. Dezember 2009 Autor Teilen Geschrieben 8. Dezember 2009 also ich hab meinen algorithmus etwas umgeschrieben und rumprobiert und es funktioniert auf einmal allerdings hab ich da mal ne frege. hier erstmal der code: int werte[300] ={0}; int index; char string[200]; printf("Bitte geben sie einen Satz ein: \n"); fgets(string,sizeof(string),stdin); fflush(stdin); while ('\n' != ( index = getchar()) && index != EOF ) werte[index]++; for ( index = 0; index < 300; index++ ) if ( werte[index] != 0 ) printf ("%c : %d\n ", index, werte[index]); return 0; } und jetzt meine frage vorher hab ich die ganze zeit mit 25 im array gearbeitet und es ging nicht allerdings wenn ich den das array auf 256 bzw drüber setze funktioniert es auf einmal, wieso? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 8. Dezember 2009 Teilen Geschrieben 8. Dezember 2009 vorher hab ich die ganze zeit mit 25 im array gearbeitet und es ging nicht allerdings wenn ich den das array auf 256 bzw drüber setze funktioniert es auf einmal, wieso? Wenn du bedenkst, dass ein gewöhnliches kleines A bereits den Wert 97 repräsentiert, sollte klar sein, warum das mit einem so kleinen Array nicht passt. Wenn du nur die Buchstaben zählen willst, musst du den Wertebereich vorher auf 0 bis 25 runterrechnen. Und nochmal der Hinweis auf den Wertebereich von char. Dein Code funktioniert nur solange, wie du den ASCII-Bereich nicht verlässt, du also kein Zeichen hast, dass durch eine Wert > 127 repräsentiert wird. Darüber liegende Zeichen ergeben für char mit hoher Wahrscheinlichkeit negative Werte, und dann knallt es wahrscheinlich. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.