文章目录
-
- 重要的事说三遍
-
- C++中string类size() length()函数的返回值是无符号数
- C++中string类size() length()函数的返回值是无符号数
- 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()函数返回的是 无符号数,我觉得肯定是 无符号数和有符号数相比出的问题。
忽然想起了之前整理的一篇各类数值型数据间的混合运算的博文,发现关于无符号与有符号数运算没有太细讲,但是也多少提到了。
从我的上面这篇博文中找出了这张图
我们可以看到,无符号和有符号两个数比较时,会默认转成无符号数,再进行比较。
但是负数的话转成无符号数的话就会非常大,所以就出现了问题
关于有符号数转成无符号数的转化过程,内容过多,我整理到了另一篇博文,有兴趣的小伙伴可以看一下,链接如下:javascript:void(0)
解决
给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);
}
};