开发者社区> 流楚丶格念> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: C++中string类 size() length()函数的返回值问题
+关注继续查看

重要的事说三遍


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


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


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


起因


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


题目是这样的


image


我写的是这样的代码


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


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


image


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


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


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


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);
    }
};


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Darabonba:支持任意 OpenAPI 网关的多语言 SDK 方案
在今天,开放平台及 OpenAPI 随处可见,它是系统与系统之间集成的重要桥梁。但 OpenAPI 用起来是否真的舒服,这要打一个大大的问号。本文将介绍 OpenAPI 领域下的难题和一些解决方案。
3145 0
string类
{ public: String(const char *str = NULL);// 普通构造函数 String(const String &other); //拷贝构造函数 ~ String(void); //析构函数 String & operator =(const String &other);//赋值函数 private: char *m_data;// 用于保存字符串 }; 请编写String的上述4个函数。
1095 0
String类的intern()
JAVA中String类的intern()方法的作用
1441 0
说说 js String
原文:说说 js String 首先说说js的字符串,说到字符串这个就和我们原来的C# 代码有区别的就是,js里面没有chart类型。就是说他里面的 “ ”和‘ ’是要表达一样的意思。 其实这个里面就有一个问题了特别实在拼接字符串的时候可能有点晕,就是我们到底是用双引号好了,还是单引号。
690 0
+关注
流楚丶格念
csdn平台优质创作者,51cto TOP博主,360图书馆科技博主,燕山大学目前大三在读,日拱一卒,功不唐捐,加油!!!
1010
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载