每个实现方法都对应这案例
目录
前言
本篇文章主要进行对求解字符串长度函数strlen()进行实现模拟的三种方法.
方法一:
用计数器方法进行模拟:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
//模拟strlen的函数实现
int my_strlen(const char* s) {
int count = 0;
assert(s != NULL);
while (*s != '\0') {
count++;
s++;
}
return count;
}
int main() {
char arr[] = "abcdef";
int len = my_strlen(arr);
printf("%d", len);
return 0;
}
该方法就是找到一个字符,使用创建临时变量count计数一次,直到找到'\0'字符串结束为止.
方法二:
使用函数递归不创建临时变量进行实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
//模拟strlen的函数实现
int my_strlen(const char* s) {
assert(s != NULL);
if (*s == '\0') {
return 0;
}
else {
return 1 + my_strlen(++s);
}
}
int main() {
char arr[] = "abcdef";
int len = my_strlen(arr);
printf("%d", len);
return 0;
}
这种方法不用创建临时变量,利用函数递归进行实现.
方法三:
利用指针-指针得到的是中间元素个数来实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
//模拟strlen的函数实现
int my_strlen(const char* s) {
char* p = s;
while (*p)
{
p++;
}
return p - s;//p指向'\0',str为起始地址,相减为字符串长度
}
int main() {
char arr[] = "abcdef";
int len = my_strlen(arr);
printf("%d", len);
return 0;
}
这种方法的思想就是找到'\0'的地址减去首元素的地址就是中间元素的个数即为字符串长度.
总结
了解字符串长度是如何计算的,模拟实现strlen函数的三种方法.