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