2016-08-16 3 views
0

Mein Programm wird ausgeführt, um eine Benutzereingabe einer angegebenen Ganzzahl anzufordern, gefolgt von der Speicherung weiterer Ganzzahlen in einem dynamischen Array. Die Ausgabe gibt ein Histogramm aus und verwendet Sterne, um zu zeigen, wie viele jeder Integer sind.Histogramm-Funktion mit dynamischen Arrays C++ 11

Ich habe alle Aufgaben bis auf eine abgeschlossen. Ich habe versucht, eine Swap-Funktion für Stunden zu implementieren, konnte aber keine Lösung für mein Problem finden.

Mein Problem ist, dass ich meine Ausgabe in Reihenfolge von am wenigsten zum größten erhalten möchte. Zum Beispiel

Enter number of grades: 5 Enter grades (each on a new line): 20 4 10 10 20 Histogram: 20 ** 4 * 10 **

Allerdings möchte ich die folgende Ausgabe ist stattdessen

Histogram: 4 * 10 ** 20 **

Hier mein Code:

#include <iostream> 
#include <vector> 
#include <algorithm> 
#include <iomanip> 

using namespace std; 

void hist(int arr[], int n); 

void swap(int &a, int &b); 

int main(){ 
    int* arr = NULL; 
    int number; 
    cout << "Enter number of grades:" << endl; 
    cin >> number; 

    cout << "Enter grades (each on a new line):" << endl; 
    arr = new int[number]; 
    for(int i = 0; i < number; i++){ 
    cin >> arr[i]; 
    } 
    hist(arr, number); 
    return 0; 
    delete [] arr; 
} 

void hist(int arr[], int n){ 
    cout << "Histogram:" << endl; 
    for (int i = 0; i < n; i++){ 
    int j; 
    for (j = 0; j < i; j++) 
     if(arr[i] == arr[j]) 
     break; 
    if (i == j){ 
     int xx = count(arr, arr+n, arr[i]); 
     cout << setw(3) << arr[i] << " "; 
     for (int j = 0; j < xx; ++j){ 
     cout << "*"; 
     } 
     cout << endl; 
    } 
    } 
} 

void swap(int &a, int &b){ 
    int temp; 
    temp = a; 
    a = b; 
    b = temp; 
} 
+1

siehe [std :: swap] (http://en.cppreference.com/w/cpp/algorithm/swap). Sie verwenden 'namespace std;', also fügen Sie zu 'std :: swap's Überladungsmenge hinzu. Haben Sie versucht, Ihre Swap-Funktion von einer einfacheren Funktion aus aufzurufen, um zu sehen, ob Sie dadurch Probleme bekommen? Hören Sie auch auf, dies zu tun: 'int x; x = 1; 'und tun Sie einfach' int x = 1; ' –

Antwort

0

Was Sie wollen, ist der Vektor zu sortieren bevor man die Elemente zählt.

void hist(int arr[], int n){ 
    sort(arr, arr+n); 
    ... 
} 

Ich würde vorschlagen, dass Sie Ihre Lösung ändern. Wenn Sie eine std::map verwenden würden Sie die Lösung Ihres Problems genau dort, in einer vorbestellten Art und Weise haben. Warum verwenden Sie auch keine std::vector?

Verwandte Themen