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:定义学生结构体[姓名、性别、分数]
要求:定义两个学生变量,实现两个学生信息交换