Fehler in Ausgabe



  • Hallo,

    warum bekomme ich bei der Ausgabe in der main einen Segmentation-Fault? Es muss irgendwie mit der Variabel c zusammenhängen.

    #include <iostream>
    #include <string>
    using namespace std;
    
    char getMostlyUsedLetter(string str) {
    
    	const char* strChar = str.c_str();
    
    	int space = 32;
    
    	int alphabet[27];
    	for(int i = 0; i < 27; i++) alphabet[i] = 0;
    
    	for(int i = 0; i < str.length(); i++) {
    		if(strChar[i] == space)
    			alphabet[26]++;
    		else {
    			alphabet[strChar[i] - 65]++;
    		}
    	}
    
    	int max = 0;
    	for(int i = 0; i < 27; i++)
    		if(alphabet[i] > max)
    			max = i;
    
    	char c = alphabet[max] + 65;
    
    	cout << "Er kommt " << max << " mal vor." << endl;
    
    	return c;
    }
    
    int main() {
    
    	string str = "ihjsdfjsdfsdfnsdjkfnsdjkfksdfjsdkfn";
    	char c = getMostlyUsedLetter(str);
    	cout << "Der häufigste Buchstabe im String lautet: " << c << endl;
    
    	return 0;
    
    }
    


  • Weil dein String aus Kleinbuchstaben besteht und du so etwas machst.

    alphabet[strChar[i] - 65]++;

    Wenn starChar als ein kleines x ist, dann liegt das bei 120.
    120 - 65 ergibt 55.
    55 eingesetzt in:

    alphabet[65]++ -> PENG!!!!!!!!!!!!

    Mach dein Alphabet Array größer oder macht aus den Kleinbuchstaben große.



  • wenn es nur großbuchstaben sind, kommt der gleiche Fehler 😞



  • Welche IDE verwendest du? Kann du mit einem Debugger umgehen, wenn nein, dann ist es jetzt genau an der Zeit dafür.
    Edit: Den restlichen schnick schnack du den allgemein verzapfst, wollen wir jetzt mal nicht ansprechen 🙂



  • Evtl. solltest Du Dir überlegen, ob Du Groß- und Kleinschreibung, oder nur eins von beiden unterstützen willst.

    Wenn Du nur Kleinbuchstaben unterstützt musst Du den Offset naturlich auch richtig wählen.
    Also 'a' (statt 65)

    Häßlich ist auch die 32, warum nicht ' '?



  • Benutze mal toupper und schreib statt 65 besser 'A'
    Und bei space darfst du natürlich auch ' ' statt 32 nehmen.


Anmelden zum Antworten