按字母顺序排列名称

新手上路,请多包涵

我正在尝试按字母顺序对名称进行排序,例如如果用户输入名称和 GPA:

 Names          GPA
Peter          2.8
Robert         5.6
David          7.8

输出应该是: -

 Names          GPA
David          7.8
Peter          2.8
Robert         5.6

到目前为止,这是我的程序( 未完成):-

 #include <iostream>
using namespace std;

int main()
{
    char name [5][25];
    float gpa [5];
    int i;

    for (i=0 ; i<5 ; i++)
    {
        cout << "Enter name " << i+1 << "  :   ";
        cin >> name [i];
        cout << "Enter GPA     :   ";
        cin >> gpa [i];
        cout << endl;
    }

    cout << "\n********** Your entered data **********\n\n";

    cout << "\tName" << "\t\t" << "GPA\n\n";

    for (i=0 ; i<5 ; i++)
    {
        cout << "\t" << name [i] << "\t\t" << gpa [i];
        cout << endl;
    }

    for (i=0 ; i<5 ; i++)
    {
        for (int j=0 ; j<1 ; j++)
        {
            cout << (int) name [i][j] << endl;

        }
    }

    cout << "\n\n******* Sorted data (w.r.t name) *******\n\n";

    cout << "\tName" << "\t\t" << "GPA\n\n";

    for (i=0 ; i<5 ; i++)
    {
        cout << "\t" << name [i] << "\t\t" << gpa [i];
        cout << endl;
    }

    cout << endl;

    return 0;
}

请记住,只有名称应按字母顺序排序。我已经取了中间输入名称的第一个字符的 ASCII 值 for 循环但是:- 1- ’s’ 的 ASCII 码与 ’S’ 不同(这对我来说是个问题) 2-我似乎无法创建一个逻辑来比较名称的第一个字母的 ASCII 值,然后对它们进行相应的排序。然后将名称与排序的字母列表链接并显示结果。 GPA 也应与名称相关联。

任何帮助,将不胜感激。

原文由 Silver Falcon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 368
1 个回答
    #include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
class stu
{
char name[40];
int cgpa;
public:
void assign()
{cin>>name;
cin>>cgpa;
}
void display()
{cout<<name<<endl<<cgpa<<endl;
}
friend void align(stu *s,int v);
};
void align(stu *s,int v)
{for(int j=0;j<v-1;j++)
{for(int i=0;i<v-j-1;i++)
{//buble sort
if(strcmp((s+i)->name,(s+i+1)->name)>0)
{char l[40];
strcpy(l,(s+i)->name);
strcpy((s+i)->name,(s+i+1)->name);
strcpy((s+i+1)->name,l);
//swapping cgpa
int t=(s+i)->cgpa;
(s+i)->cgpa=(s+i+1)->cgpa;
(s+i+1)->cgpa=t;
}
}}}

int main()
{stu s[10];int i;
for(i=0;i<5;i++)
s[i].assign();
align(s,5);
cout<<endl<<endl;
for(i=0;i<5;i++)
s[i].display();
}

原文由 siddharth 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题