C++中string类 size() length()函数的返回值问题

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中string类 size() length()函数的返回值问题相关的知识,希望对你有一定的参考价值。

重要的事说三遍

C++中string类size() length()函数的返回值是无符号数

C++中string类size() length()函数的返回值是无符号数

C++中string类size() length()函数的返回值是无符号数

起因

今天涛哥做了一道LeetCode,问了我一下,这一下子差点给我整不会了,整理此文留作纪念,也希望看到的小伙伴们记住这个知识点!

题目是这样的

我写的是这样的代码

class Solution {
public:
    string truncateSentence(string s, int k) {
        int end=-1;

        while(k&&end<s.length())
        {
            if(s[++end] == ' ')
                k--;
        }
        return s.substr(0,end);
    }
};

可是怎么样也进不去while循环

思考

这可不行啊,有问题得想办法解决啊!

我一想应该是s.length()出的问题,查了很多资料,突然发现 string类的size() length()函数返回的是 无符号数,我觉得肯定是 无符号数和有符号数相比出的问题。

忽然想起了之前整理的一篇各类数值型数据间的混合运算的博文,发现关于无符号与有符号数运算没有太细讲,但是也多少提到了,博文链接再这,有兴趣的小伙伴可以参考一下:https://yangyongli.blog.csdn.net/article/details/120246547

从我的上面这篇博文中找出了这张图

我们可以看到,无符号和有符号两个数比较时,会默认转成无符号数,再进行比较。

但是负数的话转成无符号数的话就会非常大,所以就出现了问题

关于有符号数转成无符号数的转化过程,内容过多,我整理到了另一篇博文,有兴趣的小伙伴可以看一下,链接如下:https://yangyongli.blog.csdn.net/article/details/120246756

解决

给s.length()强转一下就行了(记住这个知识点!)。

class Solution {
public:
    string truncateSentence(string s, int k) {
        int end=-1;

        while(k&&end<(int)s.length())
        {
            if(s[++end] == ' ')
                k--;
        }
        return s.substr(0,end);
    }
};

以上是关于C++中string类 size() length()函数的返回值问题的主要内容,如果未能解决你的问题,请参考以下文章

string类中的size()函数和length()函数的区别?

C++ std::string::size()函数(返回字符串的长度,以字节为单位)(与std::string::length()函数相同)

C++字符串类

C++获取字符串长度的几个函数

C++ length()、size()、sizeof()三者的区别

C++ STL string 详解