学习目标:
模拟函数strcpy()、strcat()和strcmp()
学习内容:
1.模拟函数strcpy()
2.模拟函数strcat()
3.模拟函数strcmp()
strcpy:
原型声明:
//把从src地址开始且含有结束符的字符串复制到以dest开始的地址空间
char* strcpy(char* dest, const char* src);
//注意:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串
函数模拟:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void my_strcpy(char* s, char* t) {
while (*s++ = *t++);
//将指针t指向的字符复制到s指向的位置,当*t指向最后一个字符'\0'并复制到s中时,此表达式返回值为0,跳出循环
}
int main() {
char arr[100] = "abc";
char brr[] = "Hello World!";
my_strcpy(arr, brr);//arr,brr为数组名,表示数组首元素地址
printf("%s", arr);
return 0;
}
strcat:
原型声明:
//把src所指向的字符串复制到dest所指向的字符串后面(删除*dest原来末尾的“\0”)
char* strcat(char *dest, const char *src);
//注意:要保证*dest足够长,以容纳被复制进来的*src
函数模拟:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void my_strcat(char* s, char* t) {
while (*s) { //循环找到*s指向的字符'\0'
s++;
}
while (*s++ = *t++);//将*t指向的字符复制到*s(*t覆盖的第一个字符为*s的结束符'\0')
}
int main() {
char arr[100] = "Goodbye ";
char brr[] = "World!";
my_strcat(arr, brr);//arr,brr为数组名,表示数组首元素地址
printf("%s", arr);
return 0;
}
strcmp:
原型声明:
//根据str1按照ASCII码表顺序小于、等于或大于str2的结果分别返回负整数、0或正整数
int strcmp ( const char * str1, const char * str2 );
函数模拟:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int my_strcmp(char* s, char* t) {
while (*s == *t) { //循环判断*s与*t指向的字符是否相等
if (*s == '\0') { //当*s指向'\0'时,表示两个字符串相等
return 0;
}
s++;//指向下一个字符
t++;//指向下一个字符
}
return *s - *t;//若*s与*t指向的字符不相等时,返回它们的差值
}
int main() {
char arr[] = "a";
char brr[] = "abc";
printf("%d", my_strcmp(arr, brr));//arr,brr为数组名,表示数组首元素地址
return 0;
}