1 计算器法
计算器法是通过一个循环来遍历字符串中的每个字符,直到遇到字符串结束符 \0
来计算长度。
代码1
#include <stdio.h>
#include <string.h>
#include <assert.h>
// 自定义的 strlen 函数,计算字符串长度
size_t my_strlen(const char* str) {
size_t count = 0; // 初始化计数器
assert(str != NULL); // 确保传入的字符串指针有效
while (*str != '\0') { // 循环遍历字符串,直到遇到结束符 '\0'
count++; // 每遍历一个字符,计数器加一
str++; // 移动到下一个字符
}
return count; // 返回字符串长度
}
int main() {
char arr[] = "abcdef"; // 定义一个字符数组并初始化为 "abcdef"
size_t n = my_strlen(arr); // 调用自定义的 strlen 函数,计算字符串长度
printf("%zu\n", n); // 使用 %zu 格式说明符来打印 size_t 类型的变量 n
return 0;
}
2 指针-指针法
指针-指针法是通过移动指针来遍历字符串,并计算相对位置来得到长度。
代码2
#include <stdio.h>
#include <string.h>
#include <assert.h>
// 自定义的 strlen 函数,使用指针-指针法计算字符串长度
size_t my_strlen(const char* str) {
const char* end = str; // 初始化一个指针指向字符串的起始位置
assert(str != NULL); // 确保传入的字符串指针有效
while (*end != '\0') { // 循环遍历字符串,直到遇到结束符 '\0'
end++; // 移动到下一个字符
}
return end - str; // 返回结束指针与起始指针的差值,即字符串长度
}
int main() {
char arr[] = "abcdef"; // 定义一个字符数组并初始化为 "abcdef"
size_t n = my_strlen(arr); // 调用自定义的 strlen 函数,计算字符串长度
printf("%zu\n", n); // 使用 %zu 格式说明符来打印 size_t 类型的变量 n
return 0;
}
3. 递归法
递归法是通过递归调用来计算字符串长度,直到遇到字符串结束符 \0
代码3
#include <stdio.h>
#include <string.h>
#include <assert.h>
// 自定义的 strlen 函数,使用递归法计算字符串长度
size_t my_strlen(const char* str) {
assert(str != NULL); // 确保传入的字符串指针有效
if (*str == '\0') { // 如果当前字符是结束符 '\0',返回 0
return 0;
} else {
return 1 + my_strlen(str + 1); // 返回当前字符的 1 加上剩余字符串的长度
}
}
int main() {
char arr[] = "abcdef"; // 定义一个字符数组并初始化为 "abcdef"
size_t n = my_strlen(arr); // 调用自定义的 strlen 函数,计算字符串长度
printf("%zu\n", n); // 使用 %zu 格式说明符来打印 size_t 类型的变量 n
return 0;
}