目录
2.2 实现字符串的排序【升序、降序都实现】【使用函数指针调用】
一、思维导图
二、作业
2.1 封装字符串连接函数
函数:char *MyStrcat(char *dest,char *src)
方法一:
#include <stdio.h>
#include <string.h>
char *MyStrcat(char *dest,char *src)
{
char *p=dest;
int i=strlen(p)-1;
while(*src)
{
*(dest+i)=*src;
i++;
src++;
}
*(dest+i)='\0';
return p;
}
int main(int argc, const char *argv[])
{
//自己封装字符串连接函数
char a[20]="123456";
char b[20]="asdfg";
char *p=MyStrcat(a,b);
printf("%s\n",p);
//puts(p);
return 0;
}
char a[20]="123456";
char b[20]="asdfg";
输出:123456asdfg

方法二:
#include <stdio.h>
#include <string.h>
char *MyStrcat(char *dest,char *src)
{
char *p=dest;
while(*dest)
dest++;
while(*src)
{
*dest=*src;
dest++;src++;
}
*dest='\0';
return p;
}
int main(int argc, const char *argv[])
{
char str[30]="fgshdjfkf";
char str1[]="hello";
char *p=MyStrcat(str,str1);
printf("%s\n",p);
return 0;
}
char str[30]="fgshdjfkf";
char str1[]="hello";
输出:fgshdjfkfhello

2.2 实现字符串的排序【升序、降序都实现】【使用函数指针调用】
函数:void sort(char *ste,int n,int flag)
参数说明:arr接收实参数组、n接收数组长度
flag接收升降序,如果为1则完成升序,如果数字为0则是降序
方法一:
#include <stdio.h>
#include <string.h>
void sort(char *p,int n,int flag) //参数说明:arr接收实参数组、n接收数组长度
//flag接收升降序,如果为1则完成升序,如果数字为0则是降序
{
char *q=p;
int i,j,count;
char t[10]="";
if(flag==1)
{
for(i=1;i<n;i++)
{
count=0;
for(j=0;j<n-i;j++)
{
if(*(p+j)>*(p+j+1))
{
t[0]=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t[0];
count++;
}
}
if(count==0)
break;
}
printf("%s\n",q);
}
else if(flag==0)
{
for(i=1;i<n;i++)
{
count=0;
for(j=0;j<n-i;j++)
{
if(*(p+j)<*(p+j+1))
{
t[0]=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t[0];
count++;
}
}
if(count==0)
break;
}
printf("%s\n",q);
}
else
{
printf("不是有效数字\n");
}
}
int main(int argc, const char *argv[])
{
//实现字符串的排序【升序、降序都实现】【使用函数指针调用】
char a[]="awjfinvn1234";
int n=strlen(a);
int flag;
printf("请输入升序还是降序(升序为1,降序为0):");
scanf("%d",&flag);
sort(a,n,flag);
return 0;
}

方法二:
#include <stdio.h>
#include <string.h>
void Sort(char *str,int n,int flag)
{
int i,j;
char t;
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(flag==1)
{
if(*(str+j) > *(str+j+1))//if(str[j]>str[j+1])
{
//t=str[j];str[j]=str[j+1];str[j+1]=t;
t=*(str+j);*(str+j)=*(str+j+1);*(str+j+1)=t;
}
}
else
{
if(*(str+j) < *(str+j+1))//if(str[j]>str[j+1])
{
//t=str[j];str[j]=str[j+1];str[j+1]=t;
t=*(str+j);*(str+j)=*(str+j+1);*(str+j+1)=t;
}
}
}
}
}
void print(char *p)
{
while(*p)
{
printf("%c",*p);
p++;
}
}
int main(int argc, const char *argv[])
{
char str[30]="fgshdjfkf";
int flag;
printf("升序输入1,降序输入0:");
scanf("%d",&flag);
void (*p)(char *,int,int)=Sort;
(*p)(str,strlen(str),flag);
void (*q)(char *)=print;
q(str);
return 0;
}
char str[30]="fgshdjfkf";
输入:0
输出:skjhgfffd
输入:1
输出:dfffghjks


523

被折叠的 条评论
为什么被折叠?



