嵌入式:数据结构Day1

1.练习:定义两个指针执行指向两个堆区空间,请实现连接,拷贝,比较的功能

1>定义函数,在堆区申请空间,主函数实现输入

思路:定义一个函数,调用连两次,就可以申请两个字符串空间。

2>定义函数实现,两个字符串比较

3>定义函数实现两个字符串链接

4>定义函数实现两个字符串拷贝

5>释放两个字符串堆区空间

多文件编译:

单文件编译:

源码:

//头文件

#ifndef __HEAD_H__
#define __HEAD_H__


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *Create();
void my_strcmp(const char *p, const char *q);
char *my_strcat(char *p, const char *q);
char *my_strcpy(char *p, const char *q);
char *free_space(char *p);

#endif
//自定函数

#include "head.h"

char *Create(){
	char *p = (char *)malloc(sizeof(char) * 30);
	if(p == NULL){
		return NULL;
	}
	return p;
}

void my_strcmp(const char *p, const char *q){
	char *s1 = p, *s2 = q;
	while(*s1 == *s2){
		if(*s1 == '\0'){
			break;
		}
		s1++;
		s2++;
	}
	if(*s1 - *s2 > 0){
		printf("%s > %s\n", p, q);
	}else if(*s1 - *s2 < 0){
		printf("%s < %s\n", p, q);
	}else{
		printf("%s = %s\n", p, q);  //hello
	}                               //hi!
}

char *my_strcat(char *p, const char *q){
	int i, j;
	for(i = 0; *(p + i) != '\0'; i++);
	for(j = 0; *(q + j) != '\0'; j++){
		*(p + i) = *(q + j);
		i++;
	}
	*(p + i) = '\0';
	printf("链接后字符串1 = %s\n", p);
	return p;
}

char *my_strcpy(char *p, const char *q){
	int i;
	for(i = 0; *(q + i) != '\0'; i++){
		*(p + i) = *(q + i);
	}
	*(p + i) = '\0';
	printf("拷贝后字符串1 = %s\n", p);
	return p;
}

char *free_space(char *p){
	if(p == NULL){
		return NULL;
	}
	free(p);
	p = NULL;
	return p;
}
//主函数

#include "head.h"

int main(int argc, const char *argv[])
{
	char *p = Create();
	char *q = Create();
	printf("请输入第1个字符串:"); //hello
	scanf("%s", p);
	printf("请输入第2个字符串:"); //hi!
	scanf("%s", q);
	my_strcmp(p, q);
	p = my_strcat(p, q);
	p = my_strcpy(p, q);
	p = free_space(p);
	q = free_space(q);

	return 0;
}

练习2:定义学生结构体[姓名、性别、分数]

要求:定义两个学生变量,实现两个学生信息交换

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值