C++ 求字符串的长度

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CV2017/article/details/82982538

不用标准的函数,利用 while 、指针和自增运算符(++) 来求字符串长度

简化版的代码用于日常使用(来自阿里巴巴笔试题),复杂版的代码用于理解过程

复杂版代码:

#include <iostream>
using namespace std;

int fun (char *s)
{
    char *p=s;
    while(*p++)
    {
        cout << "*p = " << *--p << endl;
        p++;
    }
    cout << "最后的 p 地址为:" << static_cast<void *> (p) << endl;
    cout << "字符 5 的地址为:" << static_cast<void *> (s + 4) << endl;
    cout << "字符 5 后的 '\\0' 地址为:" << static_cast<void *> (s + 5) << endl;
    cout << "'\\0' 下一个位置地址为:" << static_cast<void *> (s + 6) << endl;
    return p-s-1;
}

int main()
{
    char *str = "12345";
    int length = fun(str);
    cout << "length = " << length << endl;
    return 0;
}

理解:

  • *p++ 等同于 *(p++),因为 * 与 ++ 的优先级相同,并且右结合性
  • int a = *p++;   //等价于a = *(p++); 即a = *p; p = p + 1;
  • 在这个过程中,第一次 *p++ 的值是当前指针指向的值即字符 1,然后再由 ++ 的效果指向下一个值字符 2,下一次循环到 *p++ 时,那么此时 *p++ 的值为字符 2,然后再由 ++ 的效果指向下一个值字符 3,依次类推,当 *p++ 的值是当前指针指向的值即字符 5 时,由 ++ 的效果指向下一个值字符 \0,下一个 while 循环时,当 *p++ 的值是当前指针指向的值即字符 \0 时,由 ++ 的效果指向下一个值字符位置,由于此时 *p++ 的结果是 \0,跳出 while 循环,那么此时的 p 由于 ++ 的效果,是指向 \0 下一个地方

简化版代码:

#include <iostream>
using namespace std;

//求字符串长度的函数
int fun (char *s)
{
    char *p=s;
    while(*p++);
    return p-s-1;
}

int main()
{
    char *str = "12345";
    int length = fun(str);
    cout << "length = " << length << endl;
    return 0;
}

参考链接:参考博客

猜你喜欢

转载自blog.csdn.net/CV2017/article/details/82982538