第7章
7.12
编写程序,使用指针数组指向一组字符串,对这组字符串按字母顺序进行排序并输出。
#include<stdio.h>
#include<string.h>
int main(){
void sort(char *p[4]);
char a[4][20],*p[4];
int i,j;
for(i=0;i<4;i++){
for(j=0;j<20;j++){
a[i][j]='\0';
}
}
for(i=0;i<4;i++){
gets(*(a+i));
*(p+i)=*(a+i);
}
sort(p);
for(i=0;i<4;i++){
puts(*(p+i));
}
return 0;
}
void sort(char *p[4]){
int i,j;
char *k;
for(i=0;i<3;i++){
for(j=0;j<3-i;j++){
if(strcmp(*(p+j),*(p+j+1))>0){
k=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=k;
}
}
}
}
本题采用的是冒泡排序。
用二级指针也可以解决此类问题。
#include<sdtio.h>
#include<string.h>
int main(){
void sort(char *p[4]);
char a[4][20],*p[4];
int i,j;
for(i=0;i<4;i++){
for(j=0;j<20;j++){
a[i][j]='\0';
}
}
for(i=0;i<4;i++){
gets(*(a+i));
*(p+i)=*(a+i);
}
sort(p);
for(i=0;i<4;i++){
puts(*(p+i));
}
return 0;
}
void sort(char **q){
int i,j;
char *k;
for(i=0;i<3;i++){
for(j=0;j<3-i;j++){
if(strcmp(*(q+j),*(q+j+1))>0){
k=*(q+j);
*(q+j)=*(q+j+1);
*(q+j+1)=k;
}
}
}
}
方法相同,只是表示形式不同,结果也是相同的。
C语言小白小编,感谢各位大佬批评指正。