如何在不使用任何循环的情况下计算 char 数组中 char 的长度?

问题描述 投票:0回答:3

所以我正在练习我的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     
arrays char sizeof string-length
3个回答
2
投票

这可以通过两种方式实现:

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: 使用前请注意预定义的库函数及其内部实现。


0
投票

strlen()
功能将帮助您解决您的问题。在使用
#include<string.h>
功能之前不要忘记添加
strlen()


0
投票

我来晚了一点,但是您可以通过将内存除以打包值的大小来计算字符串(或任何内存)的长度:

char_array / sizeof(char) = number of chars

如果结果为 12 f.e.,则您的长度为 12。不要忘记字符串以尾随空字节结束,因此从技术上讲,您的字符串是

(array / byte ) -1  // a char is a single byte == 8

deepak的answere中的strlen函数将组装成一个内部循环,递归在技术上不是循环,但会组装成与调用操作和计数器变量类似的东西。

© www.soinside.com 2019 - 2024. All rights reserved.