您的位置:首页 > 其它

将名字按照字典序排列

2006-01-11 12:51 274 查看
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
#include <iostream.h>
#include <iomanip.h>
#include <stdio.h>
void swap(char* &, char* &);
bool compword(char*, char*);
void main(){
const int n=5; //n为人员个数(书p154多说明了一个变量t=8?)
int i,j,index;
char *tele
;
char *name
;
for(i=0;i<n;i++)
{
cin>>tele[i];
cin>>name[i];
}
//char* tele
={"99882345","12345678","26532347",
// "86861232","39070909"};
char *sele;
//char* name
={"Zhaolin", "Liguoping", "Mazhigang",
//"Sunyingming", "Mazilan"};
//tele及name均为具有n个指针元素的数组
//(书p154通过cin输入各tele[i]之值)
//sele在排序时记录name中当前“最小”元素
cout<<setw(15)<<"NAME"<<setw(15)<<"TELE NO";
for(i=0; i<n-1; i++) //选择排序
//i等于0的循环使name数组0号位置的元素交换为“最小”
//i等于1的循环使1号位置元素交换为“次小”;…。
{
sele=name[i]; index=i;
for(j=i+1; j<n; j++)
if(compword(name[j],sele)){ //name[j]<sele? 后面的更小吗?
sele=name[j];
index=j;
}
swap(name[index], name[i]);
swap(tele[index], tele[i]);
}
for(i=0; i<n; i++) //将已排好序的结果输出
{
cout<<endl<<" "<<setw(14);
cout<<setiosflags(ios::left);
cout<<name[i]<<tele[i];
}
cout<<endl;
}
void swap(char * &a, char * &b){
//交换二字符串的指针(值)
char temp;
temp=*a;
*a=*b;
*b=temp;
}
bool compword(char* a, char* b)
//比较二字符串大小,按字典序a<b则返1即true(书p155为int型)
{
while(*a != '/0' && *b != '/0') //a串与b串都没结束时
if(*a != *b)
return(*a < *b);
//第一个不相等字符, 决定整个a,b串的大小
else
{a++; b++;}
return(*a=='/0');
//注意,此时至少有一个串已结束(短者优先)
}
//----------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐