String sortieren und im array speichern



  • huhu, :>

    ich habe ein Array bestehend aus Zahlen. Diese Zahlen sind sounter und zählen die häufigkeit einer bestimmten Zahl. Wobei das Feld[0] die häufigkeit für 'a' enthält, Feld[1] für 'b'.

    Meine Zuordnung der Buchstaben zuf häufigkeit erfolgt via Differenz der Buchstaben 'z' - 'a' in einer for-Schleife.

    for(int i = 0; i <= 'z' - 'a'; i++)
    				{
    					if(count[i] != 0)									 			
    					{
    						cout << static_cast<char>('a'+i) << ": " << count[i];
    
    					}
    				}
    

    Das Array mit den Zählern ist:

    int count[26];
    

    Nun habe ich das Feld mit den Zählern Sorieren lassen:

    for(int i = 26; i > 0; i-- )			
    	{
    
    		for(int k = 0; k < i; k++)				// Schleife für die Einzelvergleiche
    		{
    			if(count[k] > count[k+1])
    			{
    
    				int t = count[k];
    
    				count[k] = count[k+1];
    
    				count[k+1] = t;				
    
    			}
    		}
    	}
    

    Das hat funktioniert und mein Array ist absteigend sortiert. Nun ist aber schon mein Problem ersichtlich: Wie komme ich nun wieder an meine Zuordnung der Counter zu den entsprechenden Zeichen? :>

    Dazu folgt noch mein 2tes Problem. Wenn in dem Array 2 gleiche Zähler auftauchen(sprich 2 Felder die gleiche Anzahl der Counter haben), soll bei der Ausgabe das Zeichen mit den niedrigsten Zeichencode bei der Ausgabe 'L' enthalten und das mit den höchsten Zeichencode ein 'H'.

    Es könnte z.B. so aussehen:

    -> "abba cool"
    a: 2 (L)    // da a = 62 dezialzahl glaube
    b: 2
    c: 1
    o: 2 (H)
    l: 1
    

    Ich sitz da schon und grübel. Beim Bubble-Algo war ich schon stolz das der so n bissel funktioniert... ^^ aber nun häng ich wieder -.-



  • du sortiert wie du es schon gemacht hast, und bei jedem swap

    int t = count[k];
    
                    count[k] = count[k+1];
    
                    count[k+1] = t;
    

    machst du ein swap bei den buchstaben array mit den gleichen indexen (k)

    also mach dies, wenn du das oben machst:

    char c = cline[k];
    
                    cline[k] = cline[k+1];
    
                    cline[k+1] = c;
    


  • *grübel* an der Umsetzung mangelt es noch. Ich kriege es nicht hin.

    Ich könnte noch ein Feld anlegen.Und in diesem Feld werden dann die Dezimalzahlen der Tastencodes in der Reihenfolge gespeichert wie sie bereits sortiert sind.

    also:

    int sort_array[26];
    

    uiui ... nicht einfach -.-



  • Nabend,

    ich sehe das Problem nicht so ganz. Du hast halt noch ein weiteres Array:

    char chars[] = "abcdefghijklmnopqrstuvwxyz";
    

    Naja und dann machst du eben, wenn es sein muss einfach ein

    std::swap(count[k], count[k+1]);
    std::swap(chars[k], chars[k+1]);
    

    Dann kannst du das letzte Kriterium ja auch recht einfach ueberpruefen.

    gruss
    v R


Anmelden zum Antworten