一.用数组存储多个字符串的方案
1.用二维字符数组
char name[5][10]={“Zhao”,“Qian”,“Sun”,“Li”,“Zhou”};
2.用指针数组(常用)
char* name[5]={“Zhao”,“Qian”,“Sun”,“Li”,“Zhou”};
二.求最小姓氏
第一种方法: 二维字符数组
缺点: 固定列数,浪费存储空间;
#include <stdio.h>
#include <string.h>
void min_name(char [][10],int);
int main()
{
char name [5][10] = { "Zhao","Qian","Sun","Li","Zhou" };
min_name(name, 5);
return 0;
}
void min_name(char name[][10], int n)
{
char* p = name[0];
for (int i = 0; i < n; ++i)
{
if (strcmp(p, name[i]) > 0)
p = name[i];
}
printf("%s\n", p);
}
运行结果:
Li
第二种方法: 指针数组
这种方法更常用,不浪费内存存储空间.
#include <stdio.h>
#include <string.h>
void min_name(char* name[], int n);
int main()
{
char* name[] = { "Zhao","Qian","Sun","Li","Zhou" };
min_name(name, 5);
return 0;
}
void min_name(char* name[], int n)
{
char* p = name[0];
for (int i = 0; i < n; ++i)
{
if (strcmp(p, name[i]) > 0)
p = name[i];
}
printf("%s\n", p);
}
运行结果:
Li
三.将姓氏排序
#include <stdio.h>
#include <string.h>
void sort(char* name[], int n);
void print(char* name[], int n);
int main()
{
char* name[] = { "Zhao","Qian","Sun","Li","Zhou" };
sort(name, 5);
print(name, 5);
return 0;
}
void sort(char* name[], int n)
//功能:将字符串进行排序
//参数:指针数组名,元素个数
//返回:无返回值
{
char* temp;
int i, j, k;
for (i = 0; i < n - 1; ++i) //选择法排序
{
k = i;
for (j = i + 1; j < n; ++j) //逐个比较取出最小值下标并保存
{
if(strcmp(name[k],name[j])>0)
k=j;
}
temp = name[i];
name[i] = name[k];
name[k] = temp;
}
}
void print(char* name[], int n)
{
for (int i = 0; i < n; ++i)
printf("%s\n", name[i]);
}
运行结果:
Li
Qian
Sun
Zhao
Zhou
四.指向指针的指针(二级指针)
定义形式: 类型名 **变量名;
例如:
int a=100;
int *p;
p=&a;
int **p1;
p1=&p;
int ***p2;
p2=&p1;
![](https://i-blog.csdnimg.cn/blog_migrate/56d08fb3836444c6be26c414cb51f430.png)
实例: 用二级指针方法求最小姓氏
#include <stdio.h>
#include <string.h>
void min_name(char** p, int n);
int main()
{
char* name[] = { "Zhao","Qian","Sun","Li","Zhou" };
char** p = name;
min_name(p, 5);
return 0;
}
void min_name(char** p,int n)
{
char* p1 = *p;
for (int i = 0; i < n; ++i)
{
if (strcmp(p1, *(p+i)) > 0)
p1 = *(p + i);
}
printf("%s\n", p1);
}
运行结果:
Li