将名字按照字典序排列
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');
//注意,此时至少有一个串已结束(短者优先)
}
//----------------------------------------------------------------------
#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');
//注意,此时至少有一个串已结束(短者优先)
}
//----------------------------------------------------------------------
相关文章推荐
- 多种排列方式满足条件,输出按照名字排列字典序最小的一个
- 按照字典序枚举排列
- 华为OJ---给定n个字符串,对n个字符串按照字典序排列
- 今天开始学Java 给定n个字符串,请对n个字符串按照字典序排列。
- 给定n个字符串,请对n个字符串按照字典序排列
- (POJ 3687)Labeling Balls [逆top序列] 求按照某种排列方式的字典序最小的top序列
- 给定n个字符串,请对n个字符串按照字典序排列。
- 数的组合问题,从n个数中选出m个数,结果按照字典序排列
- n个字符串按照字典序排列
- python给定n个字符串,请对n个字符串按照字典序排列
- 按照字典序生成1--n的排列
- 【Good Bye 2014B】【Floyd or 并查集】New Year Permutation 全排列有位置交换序列 使得字典序尽可能小
- Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。 Input 输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数
- 字典序排列(借助于TreeSet实现)
- 1/20集训一 STL C. (set/map +string 找单词按字典序排列) Andy's First Dictionary
- 排列的字典序问题
- 减治法在生成全排列中的应用(JAVA)--回溯、Johnson-Trotter算法、自字典序
- 在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排列,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的