通过本文章的学习,您将学习到:
1.对指针更加深入的理解
2.什么是指针数组
3.什么是数组指针
Here We Go!
上一篇文章:上课笔记-指针(从百草园到三味书屋)
目录
指针数组-字符串排序(不能输入)
题目:对5个国家名进行排名
思路一:冒泡排序
思路二:自定义sort排序
用指针数组的好处:
按照最一般最一般的思路,就是采用普通的排序方式,对字符串逐个比较后通过字符串复制函数 (strmcpy) 交换字符串的位置。
但是这样做会导致程序运行很慢,而且每个字符串的长度不同,不利于操作。
而指针数组很好地解决了这个问题:将这些字符数组的首地址放在以一个指针数组中,需要交换位置的时候,只需要交换首地址。
思路一:冒泡排序1
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
void sort_string(char *name[],int n);
void print(char *name[],int n);
int main()
{
int n=5;
char *name[]={"CHINA","AMERICA","AUSTRALIA","FRANCE","GERMAN"};
sort_string(name,n);
print(name,n);
return 0;
}
void sort_string(char *name[],int n)
{
char *pt;
int i,j;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(strcmp(name[j],name[j+1])>0){ pt=name[j]; name[j]=name[j+1]; name[j+1]=pt; }
}
}
}
void print(char *name[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%s\n",name[i]);
}
思路二:自定义sort函数
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
void sort_string(char *name[],int n);
void print(char *name[],int n);
bool cmp(char *name1,char *name2);
int main()
{
int n=5;
char *name[]={"CHINA","AMERICA","AUSTRALIA","FRANCE","GERMAN"};
sort(name,name+5,cmp);
print(name,n);
return 0;
}
void print(char *name[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%s\n",name[i]);
}
bool cmp(char *name1,char *name2)
{
if(strcmp(name1,name2)>0)
return name1<name2;
else return name1>name2;
}
数组指针-字符串排序(适用性更强的字符串排序)
题目:在主函数中输入5个不等长的字符串。用函数实现对它们按升序排序,并在主函数中输出这5个已排序的字符串。
写法一:strcpy写法
写法二:通过首地址的交换实现排序
写法三:自定义sort函数
写法一:strcpy写法
#include<stdio.h>
#include<string.h>
void fun(char (*p)[100]) {
char s[100];
for (int i = 0; i < 5-1; i++)
{
for (int j = 0; j < 5-i-1; j++)
{
if (strcmp(*(p + j), *(p + j + 1)) > 0)
{
strcpy(s, *(p + j +1));
strcpy(*(p + j +1), *(p + j));
strcpy(*(p + j), s);
}
}
}
}
int main() {
char str[5][100], (*p)[100];
p = str;
//输入
for (int i = 0; i < 5; i++)
{
gets(str[i]);
}
//处理
fun(p);
//输出
for (int i = 0; i < 5; i++)
{
puts(*(p+i));
}
return 0;
}
拓展一:puts函数
拓展二:数组指针:int *p[n]和int (*p)[n]的区别
拓展三:strcpy函数
写法二:由指针数组到数组指针
我们想要通过数组指针实现 “指针数组-字符串排序” 中写法一--通过首地址的交换实现排序
目前没有写出来,问题在于:在int a[x][y]里面,我没有想到一个合适的方法交换a[x]的地址
写法三:自定义sort函数
先把语言切换成C++
.....
没写出来
欢迎评论告诉我解决方法!