2016-04-08 19 views
-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; 
    } 
} 
+0

main()を追加してください。何か/エラーは –

+0

です。 'std :: vector 'です。あなたは 'std :: sort'関数を使うことができます。 –

+0

バブルソートの場合は、コンテナ内の項目の数ではなく、コンテナがソートされるまでループする必要があります。 –

答えて

0

このコードは、対応するタイトル、全体ではなく、タイトルのi番目の文字を比較している

  1. 変更この

    char title[MAX]; 
    

    std::string title; 
    

    し、その後、あなたが何らかの理由でstd::stringを使用できない場合のみ

    if (ptrs[i]->title > ptrs[i+1]->title) { 
    
  2. を書くことができるでしょう、使用strcmp

    if (strcmp(ptrs[i]->title, ptrs[i+1]->title) > 0) {