如何在特定模式中对字符串数组进行排序

时间:2015-09-14 00:49:14

标签: c++ arrays string sorting

我有一些工作排​​序按数字递增,货币值从500到25000不等。但是,我需要分配给每个值的地址,但这些地址(例如:151 Acorn)不遵循字母或数字模式,例如从最高到最低。

是否有任何排序算法可以帮助我?我当前的代码将在下面发布,但我的目标是让set数组的地址和值匹配,从[0] - [6]开始。

    #include<iostream>
#include<string>
#include <iomanip>
#include <cstdlib>


using namespace std;

int totalsList(int value[7], string address[7]);

void lookUp(int value[], string address[]);
void display(int value[], string address[]);
void showHighest(int value[], string address[]);
void sortArray(int[], int);
void sortStrings(string[], string);
void showArray(const int[], int);

int main() {
    //Definitions
    int size = 0;
    int value[7] = { 500, 1000, 1500, 6000, 15000, 20000, 25000 };
    string address[7]{ "151 Acorn", "120 Xenia", "161 Acorn", "161 Acorn", "200 Main", "200 Acorn", "500 Arcade" };

    // MAIN MENU
    int choice;
    cout << "County Auditor's Tax Look Up Program:\n";
    cout << "1.) Display The Data.\n";
    cout << "2.) Look up Taxes.\n";
    cout << "3.) Sort taxes in ascending order.\n";
    cout << "4.) Show Property with largest tax due.\n";
    cout << "5.) Exit Program.\n";
    cin >> choice;

    while (choice <= 5) {

        if (choice == 1) {
            display(value,address);
        }

        if (choice == 2) {

            lookUp(value,address);

        }

        if (choice == 3) {

            sortArray(value, 7);
            sortString(address, 7);
            cout << "Sorted Values: \n";
            showArray(value, 7);


            system("pause");



}


        if (choice == 4) {
            showHighest(value, address);
        }
    }

    //exit
    if (choice == 5) {
        return 0;
    }
    system("pause");



}


void lookUp(int value[], string address[]) {
    string add;
    cout << "Enter Address: ";


    getline(cin, add);
    getline(cin, add);
    // Validate String entry
    if (add != address[0] || add != address[1] || add != address[2] || add != address[3] || add != address[4]
        || add != address[5] || add != address[6] || add != address[7]) {
        cout << "This address is not found, please re-enter\n";

    }

    // Look up function shows cost and address according to arrays
    int valCor = 0;
    if (add == address[0]) {
        valCor = 500;
        cout << "The address: " << add << " has tax due of: " << "$" << valCor << endl;
    }
    if (add == address[1]) {
        valCor = 1000;
        cout << "The address: " << add << " has tax due of: " << "$" << valCor << endl;
    }
    if (add == address[2]) {
        valCor = value[2];
        cout << "The address: " << add << " has tax due of: " << "$" << valCor << endl;
    }
    if (add == address[3]) {
        valCor = value[3];
        cout << "The address: " << add << " has tax due of: " << "$" << valCor << endl;
    }
    if (add == address[4]) {
        valCor = value[4];
        cout << "The address: " << add << " has tax due of: " << "$" << valCor << endl;
    }
    if (add == address[5]) {
        valCor = value[5];
        cout << "The address: " << add << " has tax due of: " << "$" << valCor << endl;
    }
    if (add == address[6]) {
        valCor = value[6];
        cout << "The address: " << add << " has tax due of: " << "$" << valCor << endl;
    }

    system("pause>nul");

}

void display(int value[], string address[]) {
    // Display all arrays in table format
    cout << "All Addresses and Owed Taxes, correspondingly: \n";
    cout << "----------------------------------------------\n";

    cout << address[0] << " Tax: $" << value[0] << endl;
    cout << address[2] << " Tax: $" << value[0] << endl;
    cout << address[3] << " Tax: $" << value[0] << endl;
    cout << address[4] << " Tax: $" << value[0] << endl;
    cout << address[5] << " Tax: $" << value[0] << endl;
    cout << address[6] << " Tax: $" << value[0] << endl;
    system("pause");

}

void showHighest(int value[], string address[]){

    cout << "Highest Value: \n";
    cout << "The Highest Property tax is on the location " << address[6] << "with a tax of: $" << value[6];


}

void sortArray(int array[], int size)
{
    bool swap;
    int temp;

    do
    {
        swap = false;
        for (int count = 0; count < (size - 1); count++)
        {
            if (array[count] > array[count + 1])
            {
                temp = array[count];
                array[count] = array[count + 1];
                array[count + 1] = temp;
                swap = true;
            }
        }
    } while (swap);
}

void sortString(string array[], int size) 
{
    bool swap;
    int temp;

    do
    {
        swap = false;
        for (int count = 0; count < (size - 1); count++)
        {
            if (array[count] > array[count + 1])
            {
                temp = array[count];
                array[count] = array[count + 1];
                array[count + 1] = temp;
                swap = true;
            }
        }
    } while (swap);
}

void showArray(const int array[],int size)
{
    for (int count = 0; count < size; count++)
        cout << "$" << array[count] << "\n";
    cout << endl;
}

1 个答案:

答案 0 :(得分:1)

我会使用std::sort。您将需要自己的数据结构来将int和std :: string打包在一起。

旁注:尽量避免使用using namespace std;。它是bad practice