//若干个字符串按字母顺序由大到小输出
//指针数组,指针数组格式:int *p[ ]
代码如下:
#include <iostream>
#include <string>
using namespace std;
int main()
{
void sort(char *name[ ],int n); //函数声明
void print(char *name[ ],int n);
char *name[ ]={"BASIC","FORTRAN","C++","Pascal","COBOL"};//定义指针数组
int n=5;
sort(name,n); //函数调用
print(name,n);
return 0;
}
void sort(char *name[ ],int n) //sort函数是对字符串排序(选择排序法),形参name是指针数组名,接受实参数组name的首元素地址
{
char *temp;
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i; //k指示关键字的最小位置记录
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[j])>0)k=j;
if(k!=i)
{
temp=name[i];name[i]=name[k];name[k]=temp;//name[k]和name[j]是第k个和第j个字符串的起始地址
}
}
}
void print(char *name[ ],int n) //name[0]和name[4]分别是各字符串(按从大到小顺序排好的字符串)的首地址
{
int i;
for(i=0;i<n;i++)
cout<<name[i]<<endl;
}
运行结果:
注解:在main函数中定义指针数组name。它有5个元素,其初值分别是个字符串的起始地址。
print函数也可以写成以下形式:
void print(char *name[], int n)
{
int i=0;
char *p;
p=name[0];
while(i<n)
{
p=*(name+i++);
cout<<p<<endl;
}
}
其中,“*(name+i++)”表示先求*(name+i)的值,即name[i]的地址。将它赋给p,然后i加1.最后输出以p地址开始的字符串。