Zum Inhalt springen

string zählen


hame

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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
Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...