要实现求字符串长度的函数,核心思路是通过指针或索引遍历字符串,直到遇到字符串结束标志 \0 。以下是两种常见的实现方式:
指针遍历版本
#include <iostream>
using namespace std;
// 指针方式实现strlen
size_t myStrlen(const char* str) {
if (str == nullptr) {
return 0; // 处理空指针情况
}
const char* ptr = str;
while (*ptr != '\0') {
ptr++;
}
return ptr - str;
}
int main() {
char str[] = "Hello, World!";
cout << "字符串长度: " << myStrlen(str) << endl;
return 0;
}
索引遍历版本
#include <iostream>
using namespace std;
// 索引方式实现strlen
size_t myStrlen(const char* str) {
if (str == nullptr) {
return 0; // 空指针保护
}
size_t length = 0;
while (str[length] != '\0') {
length++;
}
return length;
}
int main() {
char str[] = "C++ Programming";
cout << "字符串长度: " << myStrlen(str) << endl;
return 0;
}
实现说明
-
核心逻辑:两种实现都通过遍历字符数组,直到遇到 \0 结束标志
-
空指针处理:添加了对 nullptr 的判断,避免程序崩溃
-
返回类型:使用 size_t 类型确保非负整数返回
-
常量指针:参数使用 const char* 防止函数内部修改原字符串
这两种实现方式的时间复杂度都是O(n),其中n是字符串的实际长度,空间复杂度为O(1),符合C++标准库中 strlen 函数的行为。