C++的那些坑(1)字符串.size()比较大小
最近在用C++刷LeetCode,在第76题最小覆盖字串里遇到了问题,代码和题解“一模一样”,但输出一直是空,没有进入循环。几番查找发现问题定位在下面这两行代码:
string s;
int l = 0, r = -1, len = INT_MAX;
while ( r < s.size()){
// ...
}
仔细对照题解发现题解里是 while ( r < int( s.size() ))
震惊!字符串的size函数居然返回的不是整型吗!
查证后发现,size()返回的是 无符号整型
而我的 r 被定义为了 -1
但是为什么没有报错呢?
cout << (r < s.size());
// 0
cout了一下输出结果是0,也就是false了,所以才没有进入循环
后来又测试 s.length(),它的返回值也是 无符号整型
以后还是要先把长度赋值给int变量再做其他处理,另外还是要多多重视基础!