1.在堆区申请2个字符类型的大小为20字节的空间。
1>定义函数,实现在堆区申请空间
2>定义函数,输入两个字符串
3>定义函数,计算两个字符串的长度【非函数】
sizeof_t my_strlen(const char *s1)
注意: sizeof_t是unsigned int的别名
4>定义函数,实现字符串连接
char *my_strcat(const char *dest,const char *src)
5>定义函数,实现连接后字符串的冒泡排序【是对字符串的每一个字符进行排序】
void Bubble(char *s)
6>实现字符串逆置
7>调用函数释放空间
//head.h文件
#ifndef N
#define N
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
char *create(int ); //申请堆区空间
char *input(char *); //输入两个字符串
unsigned int my_strlen(char *);//求两个字符串长度
char *my_strcat(char *,const char *);//两字符串连接
void Bubble(char *s); //对连接后的字符串进行排序
void inversion(char *); //字符串逆置
char* my_free(char *); //释放空间
#endif
```c
//test.c
#include"head.h"
char *create(int n){
char *p=(char *)malloc(sizeof(char)*n);
if(p==NULL){
return NULL;
}
return p;
}
char *input(char *p){ //输入两个字符串
printf("请输入字符串:");
scanf("%s", p);
return p;
}
unsigned int my_strlen(char *p){ //求字符串长度
int i=0;
for(i=0; p[i]!='\0'; i++);
return i;
}
char *my_strcat(char *p, const char *q){ //两字符串连接
int i=0,j=0;
while(p[i]!='\0'){
i++;
}
for(i,j=0; q[j]!='\0'; i++,j++){
p[i]=q[j];
}
p[i]='\0';
return p;
}
void Bubble(char *s){; //对连接后的字符串进行冒泡排序
int len=strlen(s);
char t;
for(int i=1; i<len; i++){
for(int j=0; j<len-i; j++){
if(s[j]>s[j+1]){
t=s[j]; s[j]=s[j+1]; s[j+1]=t;
}
}
}
}
void inversion(char *p){ //字符串逆置
int len=strlen(p);
char t;
for(int i=0; i<len/2; i++){
t=p[i]; p[i]=p[len-1-i]; p[len-1-i]=t;
}
}
char* my_free(char *p){ //释放空间
if(p==NULL){
return NULL;
}
free(p);
p=NULL;
}
//main.c 文件
#include"head.h"
int main(int argc, const char *argv[])
{
//堆区申请空间
char*p=create(20);
char*q=create(20);
//输入两个字符串
input(p);
input(q);
//计算两个字符串的长度
int len1=my_strlen(p);
int len2=my_strlen(q);
printf("字符串的长度分别为:%d\t%d\n", len1, len2);
//两个字符串的连接
my_strcat(p ,q );
printf("连接后的字符串为:%s\n", p);
//对连接后的字符串进行冒泡排序
Bubble(p);
printf("排序后的字符串为:%s\n", p);
//字符串逆置
inversion(p);
printf("逆置后的字符串为:%s\n", p);
//释放空间
my_free(p);
return 0;
}
···c
![在这里插入图片描述](https://img-blog.csdnimg.cn/55026a0015b8443a8829e85985f199ef.png#pic_center)