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()函数相同)