Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

string zählen

Empfohlene Antworten

Veröffentlicht

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.

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 ;).

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?!

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.

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 ?

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.

bei ***** soll der bestimmte buchstabe stehn
Welcher "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.

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?!

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.

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.

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.

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?

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.

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 von hame

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?

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.