第84节 操作字符串数组

一.用数组存储多个字符串的方案

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;

实例: 用二级指针方法求最小姓氏

#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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值