Buchstabenhäufigkeit!



  • Hallo

    Mein Programm sollte die Buchstabenhäufigkeit eines char Arrays ermitteln:
    Das char Array wurde in Kleinbuchstaben umgewandelt. Es soll also die Buchstabenhäufigkeit (a - z) ermittelt werden und dann in Bezug auf die Gesamtlänge des Arrays in Prozent umgerechnet werden!

    i = 97;
    int j = 0;
    while (i <= 122)     
    {
        Console.WriteLine((char)i + ":");
        while (charar[i] == (char)i)
        {
            j++;
            charar[i]++;
        }
    
        Console.Write(" " + j);
        i++;
    
    }
    

    Dies funktioniert leider nicht: ich möchte dass es am Ende so aussieht:
    a: 12
    b: 45
    c: 10
    usw.



  • Naja, das macht auch irgendwie keinen Sinn, was du da programmiert hast?
    Außerdem brauchst du keine verschachtelten Schleifen, ich würd eher ein Array mit Häufigkeiten anlegen, wobei der Buchstabe der Index ist. Dann deinen String durchlaufen und die Werte im Array an der richtigen Stelle hochzählen. Dann das zweite Array durchlaufen und ausgeben.



  • Danke erst mal.
    Ich verstehe zwar nicht ganz genau wie dies jetzt gehen soll, aber ich werde in nächster Zeit nochmal daran arbeiten



  • Ich bekomms einfach nicht hin. Kann mir bitte jemand helfen?



  • Das klingt stark nach einer Hausübung, und in diesem Forum gilt die Regel, dass diese nicht einfach gelöst werden.

    Wo genau hapert es denn?

    MfG SideWinder



  • Hallo

    Ich weiß nicht wie das mit dem hochzählen des Arrays gehen soll. Wo und wie soll ich das Array hochzählen und was muss ich wo ausgeben? Außerdem, brauche ich wirklich zwei Arrays?



  • for(int i=0; i<charar.length; ++i)
      count[charar[i] - 'a']++;
    


  • Du kannst in C# z.B. ein Dictionary zum Speichern der Buchstabenhäufigkeiten verwenden.

    Dictionary<char,int> haeufigkeiten=new Dictionary<char,int>();
    
    if (haeufigkeiten.ContainsKey('E'))
    {
       // Buchstabe E ist schon im Wörterbuch, Wert hochzählen:
       haeufigkeiten['E']++;
    }
    else
    {
       // Buchstabe E ist noch nicht im Wörterbuch:
       haeufigkeiten['E']=1;
    }
    


  • Oder: charar.GroupBy(id => id).ToDictionary(element => element.Key, element => element.Count());

    (Ungetestet)

    Edit: +.Key



  • #include <cctype>
    #include <iostream>
    #include <fstream>
    #include <map>
    
    int main()
    {
    	std::ifstream file( "input.txt" );
    	std::map< char, int unsigned > occurrences;
    
    	char ch = 0;
    
    	while( file.good() )
    		if( std::isprint( ch = file.get() ) ) {
    
    			if( std::islower( ch ) )
    				ch = std::toupper( ch );
    
    			occurrences[ ch ]++;
    		}
    
    	for( auto it = occurrences.begin(); it != occurrences.end(); ++it )
    		std::cout << (*it).first << ": " << (*it).second << "\n";
    }
    

    // edit: Hoppala, falsche Sprache.


Anmelden zum Antworten