size_t stringlength(const char *s)
使用此功能,如何找到字符串的长度?我不是指使用 strlen()
,而是创建它。非常感谢任何帮助。
答案 0 :(得分:10)
循环/遍历字符串,保持计数。当您点击\0
时,您已到达字符串的末尾。
涉及的基本概念是循环,条件(测试字符串的结尾),维护计数器和访问字符序列中的元素。
注意 :还有更多惯用/聪明的解决方案。然而,对于C和编程而言,OP显然是新的(没有冒犯,我们都是初学者),因此,如果其中一个解决方案做了或写了指针算术,那么过度简洁/紧凑的解决方案不是关于OP的需求,而是更多关于海报编程技巧的演示:)故意为简单易懂的解决方案提供建议至少为我赢得了一个downvote(是的,这对于虚构的代码“我甚至没有提供。我不想准备服务代码解决方案,但让OP在一些指导下弄清楚它。”
要点:我认为答案应该始终调整到提问者的水平。
答案 1 :(得分:2)
size_t stringlength(const char *s) {
size_t count = 0;
while (*(s++) != '\0') count++;
return count;
}
令人困惑的部分可能是表达式*(s++)
,在这里您使用++
运算符移动指针以指向缓冲区中的下一个字符,然后您使用解除引用运算符{{ 1}}获取指针位置的内容。另一种更清晰的方法是:
*
另外两个参考版本(但不太清晰)是:
size_t stringlength(const char *s) {
size_t count = 0;
while (s[count] != '\0') count++;
return count;
}
虽然这里所说的代码只是一个参考,为您提供如何实现上述答案中描述的算法的想法,但存在更有效的方法来执行相同的要求(例如,检查glibc implementation,一次检查4个字节)
答案 2 :(得分:0)
这可能不是相关的代码,但我认为值得一提。 因为它节省了时间......
int a[] = {1,2,3,4,5,6};
unsigned int i,j;
i = &a; //returns first address of the array say 100
j = &a+1; //returns last address of the array say 124
int size = (j-i)/sizeof(int); // (j-i) would be 24 and (24/4) would be 6
//assuming integer is of 4 bytes
printf("Size of int array a is :%d\n",size);
适用于字符串::
char a[] = "Hello";
unsigned int i,j;
j = &a+1; //returns last address of the array say 106
i = &a; //returns first address of the array say 100
printf("size of string a is : %d\n",(j-i)-1); // (j-i) would be 6
<强> If you are confused how come &a+1 returns the last address of the array, check this link. 强>
答案 3 :(得分:-1)
假设s是非空指针,则以下函数从其开始遍历s,直到找到终止零。对于传递的每个字符s++;
,计数增加count++;
。
size_t stringlength(const char *s) {
size_t count = 0;
while (*s) {
s++;
count++;
}
return count;
}