C ++使用指针算法查找字符串长度

时间:2015-09-22 14:30:59

标签: c++ for-loop strlen

我现在正在学习Comp Sci课程,我的老师在课桌上写的一个例子如下 - 概念是创建一个string长度函数,返回一个{{ 1}}使用指针算法的字符串长度。我理解这个概念但每次尝试这个例子时我的结果都是size_t

0

如果有人能够提供有关出错的信息,我会非常感激。

谢谢! :)

4 个答案:

答案 0 :(得分:3)

for( ; *str; str++, idx++){
    return(idx);
}

将在第一次迭代时返回idx。你需要做的是让for循环运行然后返回idx。那看起来像是:

for( ; *str; str++, idx++){}
return(idx);

您可以使用;结束for语句但我发现很容易错过。通过使用一个空的花括号块,它表明你打算有一个空的循环体

答案 1 :(得分:2)

如@IgorTandetnik所示,你的循环在1次迭代后终止

size_t strlen(const char* str){
    size_t idx = 0;
    for( ; *str; str++, idx++){
        return(idx); // <------ here
    }
}

Clang实际上使用-Weverything警告级别

来捕获它
> main.cpp:15:18: warning: loop will run at most once (loop increment
> never executed) [-Wunreachable-code-loop-increment]
>     for( ; *str; str++, idx++){
>                  ^~~~~~~~~~~~

修复很简单:

size_t strlen(const char* str){
    size_t idx = 0;
    for( ; *str; str++, idx++) {} // here       
    return(idx);    
}

Live Example

答案 2 :(得分:2)

这个版本实际上使用指针算法:

size_t strlen(const char* str)
{
    const char * const os = str;
    while ( *str ) ++str;
    return str - os;
}

答案 3 :(得分:0)

size_t strlen(const char* str){
    int idx = 0;

    while(*str++)
        idx++;

    return idx; 
}

尝试上面的内容,看看你是否得到正确的字符串长度。