在2D数组中按字母顺序排序字符串数组(C ++)

时间:2017-09-06 03:28:11

标签: c++ arrays sorting

到目前为止我已编码,我不知道如何使用二维数组进行排序。基本上,一个函数用于排序字符串数组,另一个函数用于交换两个字符串。任何帮助,将不胜感激。 (我也不允许使用c ++ 11:/)

#include <iostream>
#include <string>
#include <algorithm>


using namespace std;

void input_name(string&);
void sort_names(string&);
void repeat_pro(int&);
void sortArray(string, int);
int main() {

    string b_list[100][2];                                              
    string name;
    int choice;
    int count=0;

    cout << "Welcome to the Business Sorting Program!" << endl;
    do{
        input_name(name);
        b_list[count][1] = name;      
        count++; 
        repeat_pro(choice);
        cout<<"\n \n Your Businesses are:"<<endl;
            for(int j=0; j<count; j++){
                cout<<b_list[j][1]<<endl;  
            }
        cout << "\n\n";
    }while(choice == 0);
    cout << "Thanks for using this program"<<endl;


    return 0;
}


void input_name(string &name){
    cout << "Enter in the name of the business: ";
    getline(cin, name);
}

void sort_names(string &name){

}

void repeat_pro(int &choice){
  cout << "Do you want to enter in more names: ";
  string answ;
  cin>>answ;
  cin.ignore(1000,'\n');
  if (answ == "YES" || answ == "Y" || answ == "yes" || answ == "y"){
      choice = 0;
  }
  else {
      choice = 1;
  }
  }

1 个答案:

答案 0 :(得分:1)

我从描述中不清楚程序真正试图解决的问题。我假设它有点像两列电子表格,第二列是用户输入的名称(但第一列是什么?)。

假设您需要在数据进入时按顺序保持数组,只需进行二进制搜索(您可以对100个条目等小数据集进行线性搜索)。

// we don't have lambda before C++11
struct comparator {
  bool operator () (const string (&x)[2], const string (&y)[2]) const {
    return x[1] < y[1];
  }
};

//... omitted

string data[100][2];
int count = 0;
while (count < 100) {
    // no rvalue, move, rvo, etc. before C++11
    string name;
    input_name(name);
    // no type deduction and lambda
    string (*position)[2] =
            std::lower_bound(&data[0], &data[count], name, comparator());
    int index = position - &data[0];
    // simulate an vector::insert operation, but for our array
    for (int i = count; i > index; --i) {
        // before we had move in C++, we would do swap with an empty element.
        // in this case, the entry at data[count] is default constructed
        std::swap(data[i][1], data[i-1][1]);
    }
    data[index][1] = name;
}
//... omitted

当然我们可以使用typedef来使它更干净,但这只留给你。