C Zählen der zeichen einer Zeichenketten Array

Status
Für weitere Antworten geschlossen.

Tron36

Ensign
Registriert
Jan. 2011
Beiträge
212
Hallo Lleute,
ich bin gerade beim programmieren eines (Konsolen)Programms unter OpenSuse 10.1, bei dem ein Benutzer bis zu 150 zeichnen in ein char Array Eingeben kann, dabei existiert ein zweites Array von int, der die Anzahl der einzelnen zeichnen zählt. Am ende sollen die alle Zeichen (ASCII) gezählt werden und (nur die eingegebenen) auf dem Bildschirm in einer Tabelle ausgegeben werden. (Z.B. a =8; g = 9; k = 1), sprich wenn 'L' nicht eingegeben wurde soll dies auch nicht in der Tabelle ausgegeben werden.

Mein Problem ist, ich weiß nicht wie man ein Code schreibt, der eine art "Dynamische Tabelle" erstellt, der nur die eingegebenen zeichnen zählt und sie ausgibt noch wie man den Anzahl der jeweiligen Zeichnen an sich zählen lässt. :( :-(
Wobei bei Zeichenzählen könnte man doch eigentlich ein Sortieralgorithymus benutzen und anschließend die Felder miteinander vergleichen? Mein größtes Problem ist jedoch die "dynamische Tabelle".
Würde mich freuen, wenn jemand mir helfen könnte.

Lg Tron36
 
wozu machst du das überhaupt??
Kannst doch die erste tabelle erst auf ein unverwandtes Zeichen zurückführen...
Danach zählst alle zeichen und prüfst dann jedes einzelne Feld, und vergleichst mit Ascii-Tabelle, und zählst dann einfach jeweils hoch und lässt nur eine Angabe in der Zeichenvergleichstabelle zeigen, wenn der wert > 0 ist.....
So schwer is das doch gar nich, speziell, da du keine dynamische Tabelle benötigst, sondern nur eine Ausgabenliste.
 
Ich wüsste jetzt nur eine Schleifenlösung mit 150 mal je 2*26 if-Abfragen (je eine für kleine und große Buchstaben), aber ich glaube nicht, dass das der Weisheit letzter Schluss ist... :D

Das mit der Ausgabe hingegen ist einfach.
Im Int-Array machst du einfach
Code:
array[0]=/*Anzahl der As*/
array[1]=/*Anzahl der Bs*/
array[2]=/*Anzahl der Cs*/
usw.. und machst dann am Ende eine Schleife, die etwas in der Art
Code:
if(anzahl_buchstabe > 0) {
printf("%c: %d mal\n", buchstabe, anzahl_buchstabe);
}
enthält. Das sollte dir eigentlich schon weiterhelfen :)
 
Zuletzt bearbeitet:
ja was genau willst du?
alle zeichen die vorkommen geordnet in einer tabelle mit ascii wert ausgeben?
 
Ich würde einfach ein Integer-Array mit 128 Elementen benutzen. Das Element mit dem Index i steht für das ASCII-Zeichen mit dem ASCII-Code i.
Du durchläufst den Eingabestring und erhöhst die den entsprechenden Wert im Array.
Zur Ausgabe durchläufst du das Integer-Array und gibst nur die Werte größer als 0 aus.

Das ist nur eine grobe Idee. Soll nur als Anstoß zum Nachdenken dienen.
 
Hi,
es ist eine Hausaufgabe. die Aufgabe ist im Anhang
Also ich habe zwei Arrays einmal char Eingabe[156], wo der benutzer ein "Text"mit bis zu 155 zeichen eingeben kann und ein int Prüef[256], der die nur die eingegebenen, einzelnen buchstaben zählen soll (z.B. a=5, g=2) sprich wenn L nicht eingegeben wurde, soll dies erst gar nicht in der Tabelle ausgegeben werden, daher kann man ja sagen, dass die Tabelle sich, je nach eingabe des Benutzers, anders ist als die anderen Benutzer.

Mein Problem ist halt einmal, das zählen der tatsächlich eingegebenen zeichen und die Tabelle.
 

Anhänge

Zuletzt bearbeitet:
Das mit der Tabelle habe ich dir doch weiter oben schon quasi schon auf dem Silbertablett präsentiert, das ist wirklich nicht schwer :)

Was genau ist denn dein Problem beim Buchstabenzählen selbst?

Du gehst halt mit einer for-Schleife so lange dein Array entlang, bis das Ende erreicht ist (weißt du, wie man das macht?) und hast 26 Zählvariablen, die im int-array von 0 bis 25 addressiert werden bzw. 52, wenn du Groß- und Kleinschreibung differenzieren willst/musst.

Mit der ASCII-Tabelle bist du aber vertraut, oder?

ASCII1.GIF
 
Hi,
bei mir ist das problem nicht das Zählen der zeichen an sich, sondern es sollen ja in prinzip ein "dynamischer Rahmen" mit '|' und '_' erstellt werden, man hat ja von den "Rahmen" aus gesehen, wenn man nur ein zeichen eingegeben hat eine viel kleinere Tabelle als wenn man 30 zeichen eingegeben hat. In der Tabelle sollen ja keine zeichen stehen die nicht eingegeben wurden. Beim beispiel im Anhang ist es auch ziemlich gut dargestellt.

Lg Tron36
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben