-2
名前の文字配列を指しているポインタの配列をソートしようとしています。最初の2つの名前はソートするが、残りのソートはソートすることはできない。また、名前は構造の一部です。解決するポインタの配列の並べ替え
if (ptrs[i]->title[i]>ptrs[i+1]->title[i]) {
// ^^^ ^^^
可能な方法:
void sort(Class* ptrs[], int num_classes){
bool swap=false;
do
{
swap=false;
for (int i=0; i<=num_classes-1; i++) {
if (ptrs[i]->title[i]>ptrs[i+1]->title[i]) {
Swap(&ptrs[i], &ptrs[i+1]);
swap=true;
}
}
}while(swap);
}
void Swap(Class** num1,Class** num2){
Class* temp=*num1;
*num1=*num2;
*num2=temp;
}
struct Class{
char title[MAX];
int units;
char grade;
};
int main(){
int choice,num_classes=0;
char class_selection[MAX];
Class* ptrs[MAX];
char* class_ptr[MAX];
bool Continue=false;
Class classes[MAX];
for (int i = 0; i < MAX; i++){
ptrs[i]=&classes[i];
}
cout<<" 1. Add new class"<<endl<<" 2. Edit an existing class"<<endl<<" 3. Display a class"<<endl<<" 4. List all classes"<<endl<<" 5. Display GPA"<<endl<<" 6. Delete all classes"<<endl<<" 7. Quit"<<endl<<"Enter selection number: ";
cin>>choice;
if (choice!=7) {
Continue=true;
}
switch (choice) {
case 1:
add(ptrs,num_classes);
num_classes++;
break;
case 2:
edit(ptrs,num_classes);
cin.ignore();
break;
case 3:
sort(ptrs,num_classes);
cin.ignore();
cout<<"Enter the name of the class to display: ";
cin.getline(class_selection, MAX);
for (int j =0; j<MAX; j++) {
class_ptr[j]=&class_selection[j];
}
Bin_search(ptrs,num_classes,class_ptr);
break;
case 4:
sort(ptrs,num_classes);
display(ptrs,num_classes);
break;
case 5:
// display_GPA();
break;
case 6:
// delete_end();
break;
}
if (choice == 7) {
// delete_end();
//system('pause");
return 0;
}
}
main()を追加してください。何か/エラーは –
です。 'std :: vector'です。あなたは 'std :: sort'関数を使うことができます。 –
バブルソートの場合は、コンテナ内の項目の数ではなく、コンテナがソートされるまでループする必要があります。 –