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>调用函数释放空间
// 文件
// 宏定义
// 函数声明
// 全局变量
#ifndef N; //防止重复定义
#define N;
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
char *create();//堆区申请空间
void input(char *p);//输出字符串
size_t my_strlen(const char *p);//计算字符串长度
char *my_strcat(const char *dest,const char *src);//字符串连接
void Bubble(char *s);//冒泡排序
void reversestr(char *p);//字符串逆置
char *free_speac(char *p);//调用函数释放空间
#endif
//主要函数部分
#include "head.h"
int main(int argc, const char *argv[])
{
//堆区申请空间
char *p=create();
char *q=create();
//输入字符串
input(p);
input(q);
//计算字符串长度
printf("p:%d\n",my_strlen(p));
printf("q:%d\n",my_strlen(q));
//字符串连接
my_strcat(p,q);
printf("%s\n",p);
//冒泡排序
Bubble(p);
printf("%d\n",p);
//字符串逆置
reversestr(p);
printf("%d\n",p);
//释放空间
p=free_speac(p);
q=free_speac(q);
return 0;
}
//主要用来储存自定义函数
#include "head.h"
//堆区申请空间
char *create()
{
char *p=(char *)malloc(sizeof(char)*20);
if (p==NULL)
return NULL;
return p;
}
//输入字符串
void input(char *p)
{
printf("请输入字符串");
scanf("%s",p);
}
//计算字符串长度
size_t my_strlen(const char *p)
{
assert(p!=NULL) ;//判断p是否为空指针
int count=0;
while(*p!='\0')
{
count++;
p++;
}
return count;
}
//字符串连接
char *my_strcat(const char *dest,const char *src)
{
{
char *p=dest;
while(*dest)
dest++;
while(*src)
{
*dest=*src;
dest++;
src++;
}
*dest='\0';
return p;
}
//冒泡排序
void Bubble(char *s)
{
int i ,j ;
for(i=0;i<my_strlen(s);i++)
for(j=0;j<my_strlen-i;j++)
if(*(s+j)>*(s+j+1))
{
int temp=*(s+j);
*(s+j)=*(s+j+1);
*(s+j+1)=temp;
}
}
//字符串逆置
void reversestr(char *p)
{
int i;
int len =my_strlen(p);
char temp;
for (i=0;i<len/2;i++)
{
temp=p[i];
p[i]=p[len-1-i];
p[len-1-i]=temp;
}
}
//调用函数释放空间
char *free_speac(char *p)
{
if(p==NULL)
return NULL;
free(p);
p=NULL;
return p;
}