2023/3/27 作业

该程序示例展示了在C语言中如何在堆区动态分配空间,输入字符串,计算字符串长度,实现字符串连接,冒泡排序字符串以及释放内存。主要函数包括创建内存块、输入字符串、计算字符串长度、字符串拼接、冒泡排序和内存释放。
摘要由CSDN通过智能技术生成

作业:多文件编译

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 <stdio.h>
#include <string.h>
#include <stdlib.h>
char *create();
char *input(char *p);
int my_strlen(const char *s1);
char *my_strcat(char *dest, const char *src);
void Bubble(char *s);
void nizhi(char *p);
char * free_space(char *p);
#endif
//main 文件
#include "head.h"

int main()
{
	char *p = create();
	char *q = create();
	printf("%p %p\n", p, q);
	printf("请输入第一个字符串:");
	input(p);
	printf("请输入第二个字符串:");
	input(q);
	int len_p = my_strlen(p);
	int len_q = my_strlen(q);
	my_strcat(p, q);	
	Bubble(p);
	nizhi(p);	
	p = free_space(p);
	q = free_space(q);
}
//函数文件 
#include "head.h"
/*
 * function:    向内存申请20字节大小内存
 * @param [ in] 
 * @param [out] 
 * @return      返回申请成功的内存首地址
 */
char *create()
{
	char *p = (char *)malloc(sizeof(char)*20);
	if(p == NULL)
	{
		return NULL;
	}
	return p;
}
/*
 * function:    输入字符串
 * @param [ in] 
 * @param [out] 
 * @return      
 */
char *input(char *p)
{
	scanf("%s", p);
}
/*
 * function:    计算字符串长度
 * @param [ in] 
 * @param [out] 
 * @return      返回 长度
 */
int my_strlen(const char *s1)
{
	int len=0;
	while(*s1 !='\0')
	{
		len++;
		s1++;
	}
	return len;
}
/*
 * function:    连接字符串
 * @param [ in] 
 * @param [out] 
 * @return      返回连接成功后的字符串
 */
char *my_strcat(char *dest, const char *src)
{
	while(*dest !='\0')
	{
		dest++;
	}
	while((*dest = *src) !='\0')
	{
		dest++;
		src++;
	}
	return dest;
}
/*
 * function:    字符串冒泡排序
 * @param [ in] 
 * @param [out] 
 * @return      返回排序结果
 */
void Bubble(char *s)
{
	int len = 0;
	int i, j;
	char temp;
	len = my_strlen(s);
	for(i=1; i<len; i++)
	{
		for(j=0; j<len-i; j++)
		{
			if(s[j] > s[j+1])
			{
				temp = s[j];
				s[j] = s[j+1];
				s[j+1] = temp;
			}
		}
	}
	for(i=0; i<len; i++)
	{
		printf("%c\t", s[i]);
	}

}
/*
 * function:    逆置 
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void nizhi(char *p)
{
	int len = my_strlen(p);
	char *start = p;
	char *end = len-1+p;
	
	while(start < end)
	{
		char temp = *start;
		*start = *end;
		*end = temp;
		start++;
		end--;

	}
}
/*
 * function:    释放内存
 * @param [ in] 
 * @param [out] 
 * @return      
 */
char * free_space(char *p)
{
	if(p == NULL)
	{
		return NULL;
	}
	free(p);
	p = NULL;
	return p;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值