在我的结构中,我正在尝试按用户的姓氏按字母顺序对项目进行排序
这是我的代码的一部分:
struct users {
char uname[30];
char lname[30];
char mellicode[30];
int userid;
};
struct users libuser[1000];
void adduser(int id){
char temp[30];
cout<<"Enter Username :\n";
cin>>temp;
strcpy(libuser[id].uname,temp);
cout<<"Enter Lastname :\n";
cin>>temp;
strcpy(libuser[id].lname,temp);
cout<<"Enter Mellicode :\n";
cin>>temp;
strcpy(libuser[id].mellicode,temp);
libuser[id].userid = id;
}
void showuser(int id){
cout<<"\nUsername :"<<libuser[id].uname<<"\nLast name :"<<libuser[id].lname<<"\nMelli code :"<<libuser[id].mellicode<<"\nUser ID :"<<libuser[id].userid<<"\n";
}
void swapuser(int id,int id2){
char temp[30];
int itemp=id;
strcpy(temp,libuser[id].uname);
strcpy(libuser[id].uname,libuser[id2].uname);
strcpy(libuser[id2].uname,temp);
strcpy(temp,libuser[id].lname);
strcpy(libuser[id].lname,libuser[id2].lname);
strcpy(libuser[id2].lname,temp);
strcpy(temp,libuser[id].mellicode);
strcpy(libuser[id].mellicode,libuser[id2].mellicode);
strcpy(libuser[id2].mellicode,temp);
id=id2;
id2=itemp;
}
在这里我尝试对它们进行排序:
for (int h=0;h<1000;h++)
{
for(int l=0; l<1000; l++)
{
if(libuser[l].userid!=0)
if(strcmp(libuser[l].lname,libuser[l+1].lname)>0)
{
swapuser(l,l+1);
}
}
}
for (int i=0;i<1000;i++)
if(libuser[i].userid!=0)
showuser(i);
system("pause");
我有两个问题:
1.分拣部分效果不佳。
2.在用户的数组中有几个空项,如:
libuser [0] .lname = asdf
libuser [1] .lname =
libuser [2] .lname =
libuser [3] .lname = zxcdg
libuser [4] .lname = gsagg
libuser [5] .lname = gasgh
libuser [6] .lname =
libuser [7] .lname = asggg
libuser [8] .lname =
libuser [9] .lname =
libuser [10] .lname =
...
如果它们是空的,它们的libuser [X] .userid变为0,所以我可以找到empy项目,但我不知道对它们进行排序!
答案 0 :(得分:0)
首先:改变
for(int l=0; l<1000; l++)
到
for(int l=0; l<998; l++)
,因为:
swapuser(l,l+1); //l+1 should <= 999
第二:你应该在swapuser
中交换用户ID而不是id。
答案 1 :(得分:0)
你不应该摆脱所有userid = 0的人吗?
一旦你完成了这个,如果你正在使用选择排序,那么代码应该是这样的
for (int h=0;h<999;h++)
{
int lowest = h;
for(int l=h + 1; l<1000; l++)
{
if(strcmp(libuser[lowest].lname,libuser[l].lname)>0)
lowest = l;
}
if (lowest != h)
swapuser(h,lowest);
}
对于交换 - 有一个称为结构复制的功能。它不是新的:它自C89以来甚至可能更早出现。
void swapuser(int hi, int lo)
{
struct users temp;
temp = libuser[hi];
libuser[hi] = libuser[lo];
libuser[lo] = temp;
}