- 目录:
1.实现和模拟strlen函数
2.实现和模拟strcpy函数
3.实现和模拟strcat函数
4.实现和模拟strcmp函数
(1)实现和模拟strlen函数
strlen的作用:strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)。
一.代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main() {
char arr1[20] = "abcdef";
int len=strlen(arr1);
printf("%d\n", len);
return 0;
}
二.运行结果:
接下来是模拟strlen函数:
一.代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int my_strlen(char* str) {
int count = 0;
while (*str++) {//如果*str为'\0',为假,就退出循环
count++;
}
return count;
}
int main() {
char arr[20] = "abcdef";
int len=my_strlen(arr);
printf("%d\n", len);
return 0;
}
二.运行结果:
上述的strlen还是很简单的,接下来让我们一起看看strcpy函数
(2)实现和模拟strcpy函数
strcpy的作用:对字符串进行复制(拷贝),把含有"0"结束符的字符串复制到另一个地址空间,返回值的类型为"char*"。
原型声明: char* strcpy(char* strDestination, const char* strSource)
一.代码:
#include<stdio.h>
#include<string.h>
int main() {
char arr1[20] = "xxxxxxxx";//这里定义的数组必须超过六个元素
char arr2[] = "hello"; //才能把hello和'\0'放下
strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
二.运行结果:
接下来是模拟strcpy函数:
一.代码(void类型):
a.
#include<stdio.h>
#include<string.h>
void my_strcpy(char* dest,const char* str) {
while (*dest++ = *str++) {//这里是将arr1的元素换成arr2中的元素
; //*dest和*str得位置不能换
}
}
int main() {
char arr1[20] = "xxxxxxxx";
char arr2[] = "hello";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
char*类型
b.
#include<stdio.h>
#include<string.h>
char* my_strcpy(char* dest,const char* str) {
char* ret = dest;//返回的是目标函数的首地址
while (*dest++ = *str++) {
;
}
return ret;
}
int main() {
char arr1[20] = "xxxxxxxx";
char arr2[] = "hello";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
二.运行结果:
(3)实现和模拟strcat函数
strcat函数的作用:复制一个字符串,将这个字符串拼接在另一个字符串后面
一.代码:
#include<stdio.h>
#include<string.h>
int main(){
char arr1[20] = "abc";
char arr2[10] = "de";
char arr3[10] = "f";
strcat(arr1, strcat(arr2, arr3));
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}
二.运行结果:
接下来是模拟strcat函数:
一.代码:
#include<stdio.h>
#include<string.h>
char* my_strcat(char* dest,const char*str) {
char* ret = dest;
while (*dest!='\0') {
dest++;
}
while (*dest++=*str++) {//开始在arr1后面连接arr2
;
}
return ret;
}
int main(){
char arr1[20] = "abc";
char arr2[10] = "de";
char arr3[10] = "f";
my_strcat(arr1, my_strcat(arr2, arr3));
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}
二.运行结果:
好的,我们还剩最后一个strcmp函数了
(4)实现和模拟strcmp函数
strcmp函数的作用:用于比较两个字符串的ASCll值并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数
先比较第一个元素的ASCll值,如果str1大于str2,就返回1;就不用继续比较后面的字符了。
例如:下面的代码"m"和"abc"比较,因为m的ASCll值大于a,故返回1。
一.代码:
#include<stdio.h>
#include<string.h>
int main() {
char arr1[20] = "abc";
char arr2[20] = "abc";
char arr3[20] = "m";
char arr4[20] = "abf";
printf("%d\n", strcmp(arr1, arr2));
printf("%d\n", strcmp(arr1, arr4));
printf("%d\n", strcmp(arr3, arr1));
return 0;
}
二.运行结果:
模拟strcmp函数:
一.代码:
#include<stdio.h>
int my_strcmp(const char* str1, const char* str2) {
while (*str1 && *str2) {//如果*str1或者*str2为'\0',就退出循环
if (*str1 > *str2)
return 1;
else if (*str1 < *str2)
return -1;
else {
str1++;
str2++;
}
}
if (*str1)//*str2已经比较完了,都和*str1相同,但*str1还剩
return 1;
else if (*str2)
return -1;
else
return 0;
}
int main() {
char arr1[20] = "abc";
char arr2[20] = "abc";
char arr3[20] = "m";
char arr4[20] = "abf";
char arr5[20] = "abcd";
printf("%d\n", my_strcmp(arr1, arr2));
printf("%d\n", my_strcmp(arr3, arr1));
printf("%d\n", my_strcmp(arr2, arr4));
printf("%d\n",my_strcmp(arr1, arr5));
return 0;
}
二.运行结果:
好了,这就是全部的内容。谢谢大家的观看,希望对大家有所帮助。我还是一个小白,正在努力的学习当中,希望大家能给我一些宝贵的建议。谢谢!