所以我正在练习我的c语言,我需要如何计算字符数组中字符的长度,因为当我使用 sizeof() 时,我得到了数组的整个长度..虽然我可以使用“for循环”,但我不能在这个问题中使用它,所以还有其他方法可以做到这一点..
#include <stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int i,N;
char a[20];
printf("enter the string");
scanf("%s",a);
puts(a);
N = sizeof(a);
printf("%d",N);
return 0;
}
输出:-
enter the string
helloguys
helloguys
20
这可以通过两种方式实现:
1) 使用
strlen()
中定义的string.h
函数:
#include <stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int i,N;
char a[20];
printf("enter the string");
scanf("%s",a);
puts(a);
N = strlen(a);
printf("%d",N);
return 0;
}
请注意,
strlen()
内部使用了循环。根据strlen()
库中string.h
的定义,根据cppreference.com可能的实现是:
std::size_t strlen(const char* start) {
const char* end = start;
while(*end++ != 0);
return end - start - 1;
}
因此第二种不直接或间接使用循环的方式可以是递归。
2)使用递归:
#include <stdio.h>
#include<string.h>
#include<math.h>
int LengthofString(char *string)
{
if (*string == '\0')
return 0;
else
return 1 + LengthofString(string + 1);
}
int main()
{
int i,N;
char a[20];
printf("enter the string");
scanf("%s",a);
puts(a);
N = LengthofString(a);
printf("%d",N);
return 0;
}
PS: 使用前请注意预定义的库函数及其内部实现。
strlen()
功能将帮助您解决您的问题。在使用#include<string.h>
功能之前不要忘记添加strlen()
。
我来晚了一点,但是您可以通过将内存除以打包值的大小来计算字符串(或任何内存)的长度:
char_array / sizeof(char) = number of chars
如果结果为 12 f.e.,则您的长度为 12。不要忘记字符串以尾随空字节结束,因此从技术上讲,您的字符串是
(array / byte ) -1 // a char is a single byte == 8
deepak的answere中的strlen函数将组装成一个内部循环,递归在技术上不是循环,但会组装成与调用操作和计数器变量类似的东西。