求字符串长度的两个方法(指针版)

C语言计算字符串长度的两种方法
博客介绍了C语言中计算字符串长度的两种方法。一是找到首地址,地址依次加1,count同步加1,遇‘\\0’停止循环并返回count;二是指针减指针法,找到首地址和末地址,用末地址减去首地址得到字符串长度。

 第一种方法

先找到首地址的位置,再在地址上依次加一,每次加一的时候count也加一,当加到地址所存储数据为‘\0’时,停止循环并返回count。

int my_strlen(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}
int main()
{ 
	char arr[] = "abcd";
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

第二种方法

此方法为指针减指针的方法

先找到字符串首地址,再找到字符串最后一位的地址,再用末地址减去首地址便可得到字符串长度。

int my_strlen(char* str)
{
	char* start = str;
	while (*str != '\0')
	{
		str++;
	}
	return str - start;
}
int main()
{ 
	char arr[] = "abcd";
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

<think>嗯,用户让我用指针字符串长度,而且要代码简洁。首先我得回忆一下,C语言字符串是以'\0'结尾的字符数组。通常我们用的方法是循环直到遇到'\0',然后统计次数。不过用户希望用指针实现,而不是用数组下标或者库函数strlen。 那我应该怎么做呢?可能需要用指针的移动来遍历字符串。初始化一个指针指向字符串的起始位置,然后循环让指针递增,直到遇到'\0'。这时候指针的当前位置减去初始位置就是长度。 比如,定义两个指针,一个指向开头,另一个移动直到末尾。或者可以用一个指针,先保存起始地址,然后移动指针直到结束,再计算差值。这样应该比较简洁。 让我想一下代码结构。假设函数是int str_len(const char *s),然后里面用指针操作。初始化一个指针p等于s,然后循环p++直到*p为'\0'。最后返回p - s。这样对吗?因为指针相减得到的是它们之间的元素个数,所以这应该就是字符串长度。 那这样代码会很简洁,只有几行。比如: int str_len(const char *s) { const char *p = s; while (*p) p++; return p - s; } 这样应该可以。用户可能需要的是这样的实现。那有没有特殊情况需要考虑?比如空指针?但一般C库函数strlen也不处理空指针,调用者需要确保传入有效指针。所以这个函数可能也没做错误检查,保持简洁。 再测试一下,比如输入"hello",指针p从h开始,循环到o后面的'\0',p - s就是5,正确。是的,这样应该没问题。</think>使用指针计算字符串长度的简洁实现(C语言): ```c int str_len(const char *s) { const char *p = s; while (*p) p++; return p - s; } ``` **代码解析:** 1. 定义指针 `p` 指向字符串起始位置 2. 通过 `while(*p) p++` 移动指针直到遇到字符串结束符 `\0` 3. 两个指针相减 (`p - s`) 即为字符串长度 4. 时间复杂度 O(n),与标准库 `strlen()` 性能一致 **特点:** - 仅用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值