【数据结构】Day1 作业 (字符串比较/拷贝/连接,结构体使用)

main.c

#include "head.h"

int main(int argc, const char *argv[])
{
//	char s1[30]="hello";
//	char s2[]="world";

	//定义函数申请空间
	int size;
	printf("请输入申请空间的大小:");
	scanf("%d",&size);
	char *s1=create(size);  //定义指针指向堆区
	printf("请输入申请空间的大小:");
	scanf("%d",&size);
	char *s2=create(size);  //定义指针指向堆区

	//定义函数输入字符串
	Input(s1);   
	Input(s2);         
	my_strcmp(s1,s2);

	char *p=my_strcpy(s1,s2);
	printf("拷贝后的字符串是:%s\n",p);

	char *q=my_strcat(s1,s2);
	printf("连接后的字符串:%s\n",q);


	//定义函数释放空间
	p=free_char(p);
	q=free_char(q);

	return 0;
}

 test.c

#include "head.h"

//定义函数,实现堆区申请空间
char *create(int size)  //成功返回地址,失败返回NULL
{
	char *p=(char *)malloc(sizeof(char) * size);
	if(p==NULL)
	{
		return NULL;
	}
	return p;	
}

void Input(char *p)
{
	printf("请输入一字符串:");
	scanf("%s",p);
}


//定义函数,释放空间
char *free_char(char *p)
{
	if(p==NULL) return NULL;
	free(p);
	p=NULL;

	return p;
}




char *my_strcpy(char *dest,const char *str)
{
	char *p=dest;
	while(*str)
	{
		*p++ = *str++;
	}
	*p='\0';

	return dest;
}

void my_strcmp(char *dest,char *str)
{
	int ch=0;
	while(*dest==*str)
	{
		if(*dest=='\0')
		{
			break;
		}
		dest++;	
		str++;	
	}
	
	ch=*dest-*str;
	if(ch>0)  		printf("字符串比较结果是:%s>%s\n",dest,str);
	else if(ch<0)  	printf("字符串比较结果是:%s<%s\n",dest,str);
	else 			printf("字符串比较结果是:%s=%s\n",dest,str);
}

char *my_strcat(char *dest,const char *src)
 {
	char *p=dest;
	while(*p)         //while(*p!='\0') 先循环到dest\0的位置 
	{
		p++;
	}
	while(*src)       //while(*src!='\0') ,循环src
	{
		*p++=*src++;  //*p=*src;P++;src++;
	}
	*p='\0';   //加'\0',*p=*src
	return dest;
 }

head.h

#ifndef __HEAD_H__
#define __HEAD_H__

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

char *create(int size);   //定义函数,实现堆区申请空间
void Input(char *p);
char *free_char(char *p); //定义函数,释放空间

void my_strcmp(char *dest,char *str);
char *my_strcpy(char *dest,const char *str);
char *my_strcat(char *dest,const char *src);

#endif

运行结果:

ubuntu@ubuntu:struct$ gcc main.c test.c 
ubuntu@ubuntu:struct$ ./a.out 
请输入申请空间的大小:10
请输入申请空间的大小:10
请输入一字符串:hello
请输入一字符串:world
字符串比较结果是:hello<world
拷贝后的字符串是:world
连接后的字符串:worldworld

main.c


int main(int argc, const char *argv[])
{
	struct student stu1={"zhangsan","男",80};
	struct student stu2={"liyanhong","女",90};
	
	swap(stu1,stu2);

	return 0;
}

test.c

void Output(struct student stu)
{
	printf("姓名:%s\t性别:%s\t分数:%d\n",stu.name,stu.sex,stu.score);
}

void swap(struct student stu1,struct student stu2)
{
	struct student t=stu1;
	stu1=stu2;
	stu2=t;
	Output(stu1);
	Output(stu2);
}

head.h


#ifndef __HEAD_H__
#define __HEAD_H__

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

//定义学生结构体(姓名,性别,分数)
//要求:定义两个学生变量,实现两个学生信息交换

struct student{
	char name[10];
	char sex[5];
	int score;
};

#endif

运行结果:

ubuntu@ubuntu:homework$ ./a.out 
姓名:liyanhong	性别:女	分数:90
姓名:zhangsan	性别:男	分数:80

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值