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()函数返回的是 无符号数,我觉得肯定是 无符号数和有符号数相比出的问题。


忽然想起了之前整理的一篇各类数值型数据间的混合运算的博文,发现关于无符号与有符号数运算没有太细讲,但是也多少提到了,博文链接再这,有兴趣的小伙伴可以参考一下: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);
    }
};


相关文章
|
1月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
239 5
|
2月前
|
数据安全/隐私保护
【Azure Function App】PowerShell Function 执行 Get-AzAccessToken 的返回值类型问题:System.String 与 System.Security.SecureString
将PowerShell Function部署到Azure Function App后,Get-AzAccessToken返回值类型在不同环境中有差异。正常为SecureString类型,但部分情况下为System.String类型,导致后续处理出错。解决方法是在profile.ps1中设置环境变量$env:AZUREPS_OUTPUT_PLAINTEXT_AZACCESSTOKEN=false,以禁用明文输出。
|
9月前
|
存储 安全 C语言
C++ String揭秘:写高效代码的关键
在C++编程中,字符串操作是不可避免的一部分。从简单的字符串拼接到复杂的文本处理,C++的string类为开发者提供了一种更高效、灵活且安全的方式来管理和操作字符串。本文将从基础操作入手,逐步揭开C++ string类的奥秘,帮助你深入理解其内部机制,并学会如何在实际开发中充分发挥其性能和优势。
|
5月前
|
对象存储 C++ 容器
c++的string一键介绍
这篇文章旨在帮助读者回忆如何使用string,并提醒注意事项。它不是一篇详细的功能介绍,而是一篇润色文章。先展示重载函数,如果该函数一笔不可带过,就先展示英文原档(附带翻译),最后展示代码实现与举例可以直接去看英文文档,也可以看本篇文章,但是更建议去看英文原档。那么废话少说直接开始进行挨个介绍。
115 3
|
5月前
|
存储 编译器 C语言
关于string的‘\0‘与string,vector构造特点,反迭代器与迭代器类等的讨论
你真的了解string的'\0'么?你知道创建一个string a("abcddddddddddddddddddddddddd", 16);这样的string对象要创建多少个对象么?你知道string与vector进行扩容时进行了怎么的操作么?你知道怎么求Vector 最大 最小值 索引 位置么?
137 0
|
8月前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
202 11
|
8月前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、&quot;+&quot;操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
234 9
|
9月前
|
C++
模拟实现c++中的string
模拟实现c++中的string
|
8月前
|
存储 JavaScript Java
课时44:String类对象两种实例化方式比较
本次课程的主要讨论了两种处理模式在Java程序中的应用,直接赋值和构造方法实例化。此外,还讨论了字符串池的概念,指出在Java程序的底层,DOM提供了专门的字符串池,用于存储和查找字符串。 1.直接赋值的对象化模式 2.字符串池的概念 3.构造方法实例化
142 1
|
12月前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
488 5