C++ 指针排序数组
我试图对指针数组进行排序,这些指针指向名称的字符数组。我可以让程序对前两个名字进行排序,但不能对其余的名字进行排序。此外,名称也是结构的一部分C++ 指针排序数组,c++,arrays,sorting,c-strings,C++,Arrays,Sorting,C Strings,我试图对指针数组进行排序,这些指针指向名称的字符数组。我可以让程序对前两个名字进行排序,但不能对其余的名字进行排序。此外,名称也是结构的一部分 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]->
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;
}
}
void排序(类*ptrs[],整数类){
布尔交换=假;
做
{
交换=假;
对于(int i=0;ititle[i]>ptrs[i+1]->title[i]){
掉期(&PTR[i]、&PTR[i+1]);
swap=true;
}
}
}while(swap);
}
无效掉期(类别**num1,类别**num2){
类别*temp=*num1;
*num1=*num2;
*num2=温度;
}
结构类{
字符标题[MAX];
整数单位;
煤焦品位;
};
int main(){
int选项,num_类=0;
字符类_选择[MAX];
类别*ptrs[MAX];
字符*class_ptr[MAX];
bool Continue=false;
类别[最大值];
对于(int i=0;i cout此代码比较的是相应标题的第个字符,而不是整个标题:
if (ptrs[i]->title[i]>ptrs[i+1]->title[i]) {
// ^^^ ^^^
可能的解决办法:
改变这个
char title[MAX];
到
然后你就可以写作了
if (ptrs[i]->title > ptrs[i+1]->title) {
只有在由于某种原因不能使用std::string时,才可以使用strcmp
:
if (strcmp(ptrs[i]->title, ptrs[i+1]->title) > 0) {
请添加main(),错误是什么/在哪里通过使用
std::vector
简化您的生活。您可以使用std::sort
函数。对于冒泡排序,您应该循环直到容器被排序,而不是按容器中的项目数排序……这是家庭作业问题吗。。。(我想到的唯一原因是为什么要在数组上使用冒泡排序。)无论如何,按照Thomas的建议,使用向量和排序。不幸的是,我不知道如何使用向量,是的,这是一个家庭作业问题。
if (strcmp(ptrs[i]->title, ptrs[i+1]->title) > 0) {