在c中使用递归的strlen函数
strlen function using recursion in c
我是递归主题的新手,我一直在尝试使用递归编写 "strlen" 函数,这就是我的尝试:
int strlen ( char str[], int i)
{
if ( str[i] == 0) return i+1;
return strlen(str,i++);
}
我尝试了一些非常相似的东西
int strlen( char str[], int i)
{
if ( str[i] == 0) return 1;
return strlen(str,i++) + 1;
}
在我的主要功能中
int main()
{
char word[MAX_DIGITS];
scanf("%s",word);
printf("%d", strlen(word,0));
return 0;
}
但是我的程序会在我 运行 它时崩溃,我错过了什么? (顺便说一句,我正在使用 C90)
return strlen(str,i++);
您使用了错误的增量运算符。 i++
表示 i
的原始值作为参数传递,然后递增。这意味着无限递归。
您应该尝试 ++i
,或者更好,i + 1
。
您的问题从这里开始:
i++
这称为后缀。
只需使用 ++i
或 i + 1
Postfix 发送值,然后递增变量。就像这样写:
return strlen(str,i);
i = i + 1;
您必须使用 Prefix,它会递增变量然后发送值。前缀 (++i
) 的作用如下:
i = i + 1;
return strlen(str,i);
或者只发送值而不改变变量:
return strlen(str, i + 1);
在我看来,这是最简单的方法。
如果您想保留与 strlen
相同的原型。
这就是我如何看待带有递归的 strlen。
size_t strlen(char *str)
{
static int i = 0;
if (*str != '[=10=]')
{
i++;
return ft_strlen(++str);
}
return i;
}
我知道这不是最好的方法。只是我的实现。
size_t strlen (char* str) {
if (*str == 0) {
return 0;
}
return strlen (str+1) +1;
}
所以 :
strlen ("") == 0
strlen ("a") -> strln("") + 1 == 1
strlen ("he") -> strln("e") + 1) = (strln("") + 1) + 1 == 2
等等
我是递归主题的新手,我一直在尝试使用递归编写 "strlen" 函数,这就是我的尝试:
int strlen ( char str[], int i)
{
if ( str[i] == 0) return i+1;
return strlen(str,i++);
}
我尝试了一些非常相似的东西
int strlen( char str[], int i)
{
if ( str[i] == 0) return 1;
return strlen(str,i++) + 1;
}
在我的主要功能中
int main()
{
char word[MAX_DIGITS];
scanf("%s",word);
printf("%d", strlen(word,0));
return 0;
}
但是我的程序会在我 运行 它时崩溃,我错过了什么? (顺便说一句,我正在使用 C90)
return strlen(str,i++);
您使用了错误的增量运算符。 i++
表示 i
的原始值作为参数传递,然后递增。这意味着无限递归。
您应该尝试 ++i
,或者更好,i + 1
。
您的问题从这里开始:
i++
这称为后缀。
只需使用 ++i
或 i + 1
Postfix 发送值,然后递增变量。就像这样写:
return strlen(str,i);
i = i + 1;
您必须使用 Prefix,它会递增变量然后发送值。前缀 (++i
) 的作用如下:
i = i + 1;
return strlen(str,i);
或者只发送值而不改变变量:
return strlen(str, i + 1);
在我看来,这是最简单的方法。
如果您想保留与 strlen
相同的原型。
这就是我如何看待带有递归的 strlen。
size_t strlen(char *str)
{
static int i = 0;
if (*str != '[=10=]')
{
i++;
return ft_strlen(++str);
}
return i;
}
我知道这不是最好的方法。只是我的实现。
size_t strlen (char* str) {
if (*str == 0) {
return 0;
}
return strlen (str+1) +1;
}
所以 :
strlen ("") == 0
strlen ("a") -> strln("") + 1 == 1
strlen ("he") -> strln("e") + 1) = (strln("") + 1) + 1 == 2
等等