Felder, Exkurs, Datenstrukturen, Hashing
-
Felder, Exkurs, Datenstrukturen, Hashing
Nachdem ich lange versucht habe es selber zu lösen habe ich endlich aufgegeben
ich möchte ein String eingeben und danach wie oft jede buchstabe vorkommt ausgeben lassen. Bsp. Eingabe:astet Ausgabe:a-1 s-1 t-2 e-1 aber ich kann nicht verhindern dass es t 2 mal ausgibt! "Ausgabe:a-1 s-1 t-2 e-1 t-2" Lösung soll irgiendwie durch einem von obigen Themen behandelt werden! Ich freue mich auf jede Idee danke!#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
int c=0;
cin>>str;
for(int a=0;a<str.size();a++)
{
for(int b=0;b<str.size();b++)
if(str[a]==str[b])
c++;
cout<<str[a]<<" _ "<<c<<"\n";
c=0;
}
return 0;
}
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ (auch C++0x) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Du könntest dir z.B. merken, für welche Buchstaben du die Zählung schon ausgegeben hast. Das zweite 't' in "astet" würdest du dann überspringen, weil du den Zähler für 't' schon ausgegeben hast.
Welche Buchstaben du schon behandelt hast, kannst du auch in einem String speichern. Der ist am Anfang leer, neue Buchstaben hängst du mit der Memberfunktion
push_backan und mit der Memberfunktionfindkannst du prüfen, ob ein Buchstabe schon in dem String vorhanden ist.
-
#include <map> #include <string> int main() { std::string s; std::getline(std::cin, s); std::map<char, unsigned int> m; for (std::string::const_iterator i = s.begin(); i != s.end(); ++i) { ++m[*i]; } for (std::map<char, unsigned int>::const_iterator i = m.begin(); i != m.end(); ++i) { std::cout << i->first << ": " << i->second << "\n"; } }Da sag noch mal einer auto wäre nicht sinnvoll.

-
ok ich fange von vorne an
ich bin ziemlich neu und folge nach einem plan und möchte wissen dass man solche Sortierungen ohne map oder push_back vectors lösen könnte
aber danke fürs mühe!
-
astet schrieb:
ok ich fange von vorne an
ich bin ziemlich neu und folge nach einem plan und möchte wissen dass man solche Sortierungen ohne map oder push_back vectors lösen könnte
aber danke fürs mühe!Ok, ohne push_back: Bei jedem Buchstaben schaust du, ob er bisher schon mal im String vorkam. Und zwar suchst du vom Anfang (Index 0) bis zum aktuellen Index in
str. Falls er schon mal vorkam, machst du keine Zählung+Ausgabe.
-
Eine Möglichkeit wäre, ein rohes Array zu nehmen. Da die Anzahl an Buchstaben konstant ist, würde sich das anbieten.
In etwa so:int count[26] = { 0 }; for(int i = 0; i < str.size(); ++i) // mach zauberei mit str und countDanach gibst du alle Elemente aus, wo der Wert nicht 0 ist.