Ale*_*lex 10 c algorithm strlen
昨天我在面试时被要求在C中实现strlen()而不使用任何标准函数,所有这些都是手工完成的.作为一个绝对的业余爱好者,我用while循环实现了原始版本.看看这个,我的面试官说它可以只用一行代码实现.我当时无法使用该术语生成此代码.在采访之后,我问了我的同事们,他们中最有经验的人给了我这件真的很好的作品:
size_t str_len (const char *str)
{
return (*str) ? str_len(++str) + 1 : 0;
}
Run Code Online (Sandbox Code Playgroud)
所以有一个问题,是否可以不使用递归,如果是,如何?条款:
请注意,这不是优化或实际使用的问题,只是完成任务的可能性.
Dig*_*uma 12
类似于@ DanielKamilKozar的答案,但是使用for循环,你可以在没有for-loop主体的情况下执行此操作,并len在函数中正确初始化:
void my_strlen(const char *str, size_t *len)
{
for (*len = 0; str[*len]; (*len)++);
}
Run Code Online (Sandbox Code Playgroud)
我能想到的最好的是这个,但它不是标准,strlen因为函数本身有不同的原型.此外,它假设*len在开始时为零.
void my_strlen(const char *str, size_t *len)
{
while(*(str++)) (*len)++;
}
Run Code Online (Sandbox Code Playgroud)
我很好奇标准是如何strlen在"一行代码"中实现的,因为它需要一个return,即"一行代码",根据你发布的内容来判断.
也就是说,我同意评论说这是一个令人难以置信的愚蠢的面试问题.
size_t str_len (const char *str)
{
for (size_t len = 0;;++len) if (str[len]==0) return len;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9948 次 |
| 最近记录: |