S
Hi,
also ich sehe da verschiedene "Schwierigkeiten".
1.)
Agrippa schrieb:
...die Wiederholungen zurückgegeben werden...
Das ist ein wenig unscharf formuliert.
Wenn ich das richtig sehe, willst Du ein "Histogramm" zurückgeben (= die Anzahl pro möglichem Element.
2.) Ich würde auch genau das tun und es nicht gleich mit der Ausgabe verfrickeln ("i+'a':AnzBuch[i]").
Das Histogramm kannst Du über ein char-Array zurückgeben ... oder (IMHO eleganter) über eine std::map<char, unsigned int>;
3.) WENN Du das über ein char-Array machst, solltest Du bedenken, dass die ASCII-Codes der Zeichen (die Du als index verwendest) nicht den Zahlen 0 bis 26 entsprechen (wie Du es hier annimmst: "int const AnzChar=26; int AnzBuch[AnzChar]= {0};").
4.) Mir fällt auf, dass Du verschiedene Einschränkungen für die Zeichen machst (nur Kleinbuchstaben, für Zeichensätze mit nicht zusammenhängendem Kleinbuchstaben funktioniert das nicht, ....). Es wird einfacher und flexibler, wenn Du einfach ein Histogramm über die Eingabe erstellst und - wenn Dich bei der Ausgabe nur die Kleinbuchstaben interessieren - die "passenden" bei der Ausgabe rausfilterst.
Mein Vorschlag:
...
#include <map>
#include <string>
void erstelle_Histogramm(string const& s, map<char, unsigned int>& hist);
int main()
{
map<char, unsigned int> AnzBuch;
string Inhalt;
cout << "Bitte geben Sie eine Zeichenfolge ein.\n\n" << endl;
getline(cin, Inhalt);
erstelle_Histogramm(Inhalt, AnzBuch);
for(map<char, unsigned int>::const_iterator it = AnzBuch.begin(); it != AnBuch.end(), ++it)
cout << "\nDie Wiederholungen im Eingegebenen Text sind: Buchstabe " << it->first << " Anzahl: " << it->second << "\n\n";
return 0;
}
void erstelle_Histogramm(string const& s, map<char, unsigned int>& hist) {
for (string::size_t i=0; i < s.length(); ++i) hist[s[i]]++;
}
P.S.: Ich habe mal die Parameter in erstelle_Histogramm() anders genannt als die main-Variablen, damit es klar wird, dass sie anders heißen dürfen ....
P.P.S: Ist natürlich nicht die Schönste Variante, aber ich wollte nur zuviel Neues reinbauen...
P.P.P.S.: Ich meine, dass bei dieser Form der Standardkonstruktion für ein nicht vorhandenes map-Element das unsigned int mit 0 initialisiert wird .... bin mir aber nicht ganz sicher. Falls nicht, hilft ein vorheriges find() mit manueller Initialisierung weiter. ("if(hist.find(s[i]) == hist.end()) hist[s[i]] = 0;")
Gruß,
Simon2.