2012-03-26 2 views
1

Хорошо, это было задание, которое я вычитал из-за того, что вывод был отображен назад. Я должен был пригласить пользователя для ввода, а затем отобразить ввод в порядке убывания, но у меня проблема с дисплеем. У меня есть два массива, один год [] для хранения месяцев и один month[totalMonths] для ввода пользовательского ввода. Когда я сортирую и показываю вход, year[] не соответствует месяцам, он исправлен. Например, если пользователь вводит 1 для января, 2 для февраля и 3 для Мар, дисплей будет; Jan: 3 февраля: 2 Mar: 1Сортировка ввода работает в обратном направлении

Любые идей о том, как я могу получить месяцев, чтобы соответствовать с его соответствующим входом для дисплея? Вот вроде и функция отображения:

void sortArray(double month[], string year[], int totalMonths) 
{ 
    int temp; 
    bool swap; 
    do 
    { 
     swap = false; 
     for(int count = 0; count < totalMonths - 1; count++) 
     { 
      if(month[count] < month[count + 1]) 
      { 
       temp = month[count]; 
       month[count] = month[count + 1]; 
       month[count + 1] = temp; 
       swap = true; 
      } 
     } 
    } while(swap); 
    cout << "------------------------------------------------------------" << endl; 
    cout << "Here are the months rainfall statistics sorted from highest to lowest: " << endl; 

    for (int index = 0; index < totalMonths; index++) 
     cout << year[index] << "\t " << setw(5) << month[index] << endl; 
} 

Вот мое string year[] определения:

string year[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", 
      "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; 
+0

I suppost your year array содержит somthing like: {"jan", "feb", "mar", ...}? Можете ли вы распечатать определение годового стола plz – grifos

+0

Я только что обновил определение моего года [] в своем сообщении. – Gmenfan83

+0

это ставит наибольший элемент сверху; когда вы меняете, вы должны поменять как месяц, так и год (и любые другие поля, которые вы связали вместе) – Adrian

ответ

1

Вы позволили перестроить year массив? В вашей процедуре сортировки, где вы меняете значения month, вы можете поменять соответствующие значения в массиве year.

Если вы не хотите мутировать массив year, вы можете просто добавить уровень косвенности. Определите массив индексов в массивах month и year и отсортируйте индексы.

int index[12] = { 0,1,2,3,4,5,6,7,8,9,10,11 }; 

// inside your sort routine... 

if(month[index[count]] < month[index[count + 1]]) 
{ 
    temp = index[count]; 
    index[count] = index[count + 1]; 
    index[count + 1] = temp; 
    swap = true; 
} 

// print the arrays... 

for (int count = 0; count < totalMonths; count++) 
    cout << year[index[count]] << "\t " << setw(5) << month[index[count]] << endl; 
+0

Спасибо! Это сработало отлично. Спасибо всем за ваше время и помощь, это очень ценится! – Gmenfan83

2

Как Blastfurnace указал, что вам нужно отсортировать массив года, чтобы соответствовать месяцу. Или если вы не можете, вы можете создать небольшую структуру для представления ваших данных месяца. Как это:

typedef struct _monthData{ 
    double data; 
    int monthIndex; 
} monthData; 

void sortArray(monthData month[], string year[], int totalMonths) 
{ 
    int temp; 
    bool swap; 
    do 
    { 
     swap = false; 
     for(int count = 0; count < totalMonths - 1; count++) 
     { 
      if(month[count].data < month[count + 1].data) 
      { 
       temp = month[count]; 
       month[count] = month[count + 1]; 
       month[count + 1] = temp; 
       swap = true; 
      } 
     } 
    } while(swap); 
    cout << "------------------------------------------------------------" << endl; 
    cout << "Here are the months rainfall statistics sorted from highest to lowest: " << endl; 

    for (int index = 0; index < totalMonths; index++) 
     cout << year[month[index].monthIndex] << "\t " << setw(5) << month[index] << endl; 
} 

С уважением

0

Только что вы должны изменить month[count] < month[count + 1]) к month[count] > month[count + 1]). Таким образом, ваш полный код будет приведен ниже:

#include<iostream> 
#include<string> 
#include<string.h> 
#include<iomanip> 

using namespace std; 

void sortArray(double month[], string year[], int totalMonths) 
{ 
    int temp; 
    bool swap; 
    do 
    { 
     swap = false; 
     for(int count = 0; count < totalMonths - 1; count++) 
     { 
      if(month[count] > month[count + 1]) 
      { 
       temp = month[count]; 
       month[count] = month[count + 1]; 
       month[count + 1] = temp; 
       swap = true; 
      } 
     } 
    } while(swap); 
    cout << "------------------------------------------------------------" << endl; 
    cout << "Here are the months rainfall statistics sorted from highest to lowest: " << endl; 

    for (int index = 0; index < totalMonths; index++) 
     cout << year[index] << "\t " << setw(5) << month[index] << endl; 
} 

int main() 
{ 
    string year[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", 
      "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; 
    double month[] = {12,11,10,9,8,7,6,5,4,3,2,1}; 
    sortArray(month,year,12); 
    return 0; 
} 
Смежные вопросы