c语言指向指针的指针排序案例,C语言 指针经典例题案例详解

#include

#include

#include

#include

#include

#include

#include

#define IO 996

#define N 10

#define input "%d,%d,%d,%d\n\n"

void product();

void sortReplication();

void sort();

void swap(int *,int);

void exchange();

void frequency();

int subString(char *,char *);

int main(int argc,char *argv[]){

//product();

//sortReplication();

//sort();

//exchange();

//frequency();

}

void product(){

//已知一个整形数组X[4],其元素值分别为3/10/4/20,使用指针求个数字元素的积。

int x[]={3,10,4,20},i,product=1,*xp=&x[0];

for(i=0;i<4;i++){

product*=*(xp+i);//*xp+i

//printf("%d\n",i);

//printf("%d\n",*xp);

//printf("%d\n",*xp+i);

//printf("%d\n\n",product);

}

printf("%d\n\n",product);

}

void sortReplication(){

//有四个字符串,实现将他们按照字符串中的字符个数从小到大排序,

//再分别取出每个字符串的第三个字母形成一个新的字符串输出(若少于三个字符的输出*),

//要求:利用字符串指针和指针数组完成。

char *array[5]={"yangmufa","shuai","de","chaojishuai",}\

,(*tem)=NULL,t[5]={NULL};

int i=0,j=0,k=0;

for(i=0;i<4;i++){//i<4-1表示从第一个开始到倒数第二个结束(4个数组)

k=i;//记录小串

for(j=0;j<4;j++){//表示从第二个开始到倒数第一个结束,每一次比上一次比较次数减一

if(strlen(array[k])>strlen(array[j])){

k=j;//记录小串

}

if(i!=k){//交换

tem=array[i];

array[i]=array[k];

array[k]=tem;

}

}

}

//分别取出每个字符串的第三个字母形成一个新的字符串

for(i=0;i<4;i++){

puts(*(array+i));

if(strlen(*(array+i))>2){

//*(*(array+4)+i)=*(*(array+1)+2);

//此方法不可取因为"String"是存在静态存储区的,这个地址中的值不能被修改。

t[i]=*(*(array+i)+2);

}else if(strlen(*(array+i))<3){

t[i]='*';

}

}

printf("\n新字符串:%s\n\n",t);

}

void sort(){

//定义一个动态数组长度为n,用随机数给各数组元素赋值,

//然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。

int n,i,*array;

printf("输入长度:");

scanf_s("%d",&n);

array=(int*)malloc(n*sizeof(int));//以N为基数动态反配N个int类型大小的内存

srand((unsigned)time(NULL));//设置以时间为随机种子

printf("随机数排序前:");

for(i=0;i

array[i]=rand();//获取以时间为种子得来的随机数后赋值给array

printf(" %d ",array[i]);

}

printf("\n");

swap(array,n);

}

void swap(int * array,int lenth){

int i=0,j=0,k=0,temp;

printf("\n随机数排序后:");

for(i;i

k=i;

for(j=0;j

if(array[k]

if(k!=i){

temp=array[k];

array[k]=array[i];

array[i]=temp;

}

}

}

for(i=0;i

printf(" %d ",array[i]);

}

printf("\n\n");

}

void exchange(){

//输入N个整数,将其中最小的数与第一个数对换,将自重最大的数与与最大的数交换。

int array[8],i,j,k,temp=0,max=0,min=0;

srand((unsigned)time(NULL));//设置时间种子

printf("随机数:");

for(i=0;i<8;i++){

array[i]=rand();//获取以时间为种子得来的随机数后赋值给array

printf(" %d ",array[i]);

}

printf("\n交换后:");

max=array[0];

min=array[0];

for(i=0;i<8-1;i++){

if(max

max=array[i];

}//求出最大元素

if(min>array[i]){

min=array[i];

}//求出最小元素

}

array[0]=min;//将其中最小的数与第一个数对换,

array[7]=max;//将其中最大的数与与最大的数交换。

for(i=0;i<8;i++){

printf(" %d ",array[i]);

}

for(i=0;i<8;i++){

k=i;

for(j=0;j<8;j++){

if(array[k]

if(k!=i){

temp=array[k];

array[k]=array[i];

array[i]=temp;

}

}

}

printf("\n排序后:");

for(i=0;i<8;i++){

printf(" %d ",array[i]);

}

printf("\nmax:%d\nmin:%d\n",max,min);

}

void frequency(){

//计算字符串中子串出现的次数,要求用一个subString函数实现,

//参数为指向字符串和子字符串的指针,返回次数。

char array[]={"yangmufchaojiwudidashuaigeyangmufachaojishuai"},\

SubString[]={"chaoji"};

printf("字符串:");

puts(SubString);

printf("在字符串:");

puts(array);

printf("中出现了: ");

printf(" %d 次\n",subString(array,SubString));

}

int subString(char *a,char *s){

int i=0,j=0,count=0,alen=strlen(a),slen=strlen(s);

while(i

if(a[i]==s[j]){

//如果子串第j个元素和母串的第i个元素相等则都继续指向下一个元素进行比较

i++;

j++;

}else{

//如果子串和母串出现不匹配则母串回到挡轮比较之前,子串归零

i=i-j+1;

j=0;

}

if(j==slen){

//如果出现子串到最后一个元素均与母串相等的情况则出现次数加一,子串归零继续下一轮比较。

count++;

j=0;

}

}

return count;

}

Result:

product();

6d33dc1c9f4f7882a959bea2de925d1d.png

sortReplication();

c5df6a2800b4271672778a6bff7da74c.png

sort();

046120007a4219de6fc6e27d75d2cd6c.png

exchange();

fe8cc4be5aa3fe68d59f58c06c43bbb6.png

frequency();

063df1ac36e0d7c007feb6f57449e64a.png

/*-------------------反爬声明o(*▽*)咻咻咻--------------------

作者:版权声明:本文为博主倾情原创文章,整篇转载请附上源文链接!

如果觉得本文对你有所收获,你的请评论点赞 与

合理优质的转发也将是鼓励支持我继续创作的动力,

更多精彩可百度搜索 杨木发 或:

坚持创作 善于总结 开源共享 高质进步。

-------------------反爬声明o(*▽*)咻咻咻--------------------*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值