CHAR auswerten
-
Hallo,
ich würde gerne wissen wie ich die Häufigkeit von Buchstaben in einem Wort ermitteln kann.
Beispiel
HALLO = H A L O
1 1 2 1ich hoffe ihr könnt mir wie immer helfen
gruß
s.buhr
-
Hi,
#include <iostream> using namespace std; int main(int argc, char** argv) { if(argc < 2) { std::cout << "Aufruf: Programmname <string>\r\n"; return 1; } int nCount['z'-'a'+1]; for(int c = 'a'; c <= 'z'; ++c) { nCount[c-'a'] = 0; for(const char* it = argv[1]; *it != '\0'; ++it) if(*it == c || *it == (c + ('A'-'a'))) ++nCount[c-'a']; } for(int n = 0; n < 'z'-'a'+1; ++n) std::cout << static_cast<char>('a'+n) << ": " << nCount[n] << '\n'; return 0; }
Aufruf:
Programm <string>So, da hast du mal einen dicken fetten Code, den du jetzt auseinandernehmen kannst. Er arbeitet übrigens case-insensitive.
MfG MAV
-
C:\Program Files\Microsoft Visual Studio\MyProjects\Huffman\main.cpp(14) : error C2440: 'initializing' : cannot convert from 'const char *' to 'char *'
Könntet ihr mir auch gleich die Ausgabe "mitliefern"?
Gruß und Danke
S.Buhr
-
Danke, habe gerade gesehen das du deinen Code nochmal überarbeitet hast und jetzt klappt er auch. Vielen Dank und schönen Tag noch
Gruß
S.Buhr
-
Ja, das erste war aus dem Kopf und zu schnell getippt...
-
Wer garantiert dir denn, dass A-Z und a-z genau hintereinanderliegen und a-z nach A-Z kommt? Der Standard garantiert das nur für 0-9.
-
int main() { char satz[]="Dieser Text wird durchsucht"; int co[26]; for(int i=0;i<27;i++) { co[i]=count(satz,satz+strlen(satz),65+i)+count(satz,satz+strlen(satz),97+i); cout << char(65+i) << " - " << co[i] << endl; } return 0; }
-
@HumeSikkins:
Niemand, das war doch nur ein kleines Beispielchen, aber hast schon Recht.Da hat er doch schon was zum Verbessern, er kann es ja z.B. auch so machen, dass der String erst einmal verkleinert wird, dafür kann er einen iterator über den String laufen lassen und jeden Char einzeln verkleiner lassen via. tolower.
Auf die richtige Sprache bezogen muss man natürlich noch die locale-Variable beachten:
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=stricmp#AnswMfG MAV
-
Hallo,
warum nicht einfach eine map<char, int> nehmen, den String durchlaufen und fertig ist der Lack?void func(const string& s) { map<char, int> m; for (string::iterator it = s.begin(); it != s.end(); ++it) { m[*it]++; } }
-
uh oh...
schlicht aber genial, auf sowas komm ich nie