STL介绍以及string类

news2024/12/26 11:30:40

什么是STL

是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 

STL的六大组件

为什么要学习string类

C语言中的字符串

C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。

标准库中的string类

1.字符串是表示字符序列的类

2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性

3. string类是使用char

(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string)

4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits 和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)

5. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作

总结:

1. string是表示字符串的字符串类

2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作

3. string在底层实际是:basic_string模板类的别名,typedef basic_string string

 4. 不能操作多字节或者变长字符的序列。 在使用string类时,必须包含#include头文件以及using namespace std。

题目

LCR 192. 把字符串转换成整数 (atoi) - 力扣(LeetCode)

class Solution {
public:
    int myAtoi(string str) 
   {
        int res = 0, bindry = INT_MAX / 10;
        int i = 0, sign = 1, length = str.size();
        if(length == 0) return 0;
        while(str[i] == ' ')
            if(++i == length) return 0;
        if(str[i] == '-') sign = -1;
        if(str[i] == '-' || str[i] == '+') i++;
        for(int j = i; j < length; j++) {
            if(str[j] < '0' || str[j] > '9') break;
            if(res > bindry || res == bindry && str[j] > '7')
                return sign == 1 ? INT_MAX : INT_MIN;
            res = res * 10 + (str[j] - '0');
        }
        return sign * res;
    }
};

415. 字符串相加 - 力扣(LeetCode)

两个数字位数不同怎么处理,这里我们统一在指针当前下标处于负数的时候返回 0,等价于对位数较短的数字进行了补零操作。

class Solution {
public:
    string addStrings(string num1, string num2)
       {
        int i = num1.length() - 1, j = num2.length() - 1, add = 0;
        string ans = "";
        while (i >= 0 || j >= 0 || add != 0) {
            int x = i >= 0 ? num1[i] - '0' : 0;
            int y = j >= 0 ? num2[j] - '0' : 0;
            int result = x + y + add;
            ans.push_back('0' + result % 10);
            add = result / 10;
            i -= 1;
            j -= 1;
        }
        // 计算完以后的答案需要翻转过来
        reverse(ans.begin(), ans.end());
        return ans;
    }
};

. - 力扣(LeetCode)

方法一:

class Solution {  
public:  
    // 定义一个公开的成员函数isPalindrome,接受一个string类型的参数s,返回一个bool值  
    bool isPalindrome(string s) {  
        // 定义一个空字符串sgood,用于存放经过处理后的s的有效字符(即去除非字母数字字符并转换为小写)  
        string sgood;  
        // 遍历输入字符串s中的每个字符  
        for (char ch: s) {  
            // 如果当前字符是字母或数字(使用isalnum函数判断),则将其转换为小写(使用tolower函数)并添加到sgood中  
            if (isalnum(ch)) {  
                sgood += tolower(ch);  
            }  
        }  
        // 使用sgood的逆序迭代器(rbegin到rend)构造一个新的字符串sgood_rev,它包含了sgood的所有字符但顺序相反  
        string sgood_rev(sgood.rbegin(), sgood.rend());  
        // 返回sgood和sgood_rev是否相等,即原字符串s是否在经过处理后可以构成一个回文字符串  
        return sgood == sgood_rev;  
    }  
};

class Solution {
public:
    bool isPalindrome(string s) {
        int n = s.size();
        int left = 0, right = n - 1;
        while (left < right) {
            while (left < right && !isalnum(s[left])) {
                ++left;
            }
            while (left < right && !isalnum(s[right])) {
                --right;
            }
            if (left < right) {
                if (tolower(s[left]) != tolower(s[right])) {
                    return false;
                }
                ++left;
                --right;
            }
        }
        return true;
    }
};

 

字符串最后一个单词的长度_牛客题霸_牛客网 (nowcoder.com)

#include <iostream>
using namespace std;

int main() {
    string str;
    while (cin >> str) {
        if (cin.get() == '\n')
            cout << str.size();
    }
}

. - 力扣(LeetCode)

#include <iostream>
using namespace std;

int main() {
    string str;
    while (cin >> str) {
        if (cin.get() == '\n')
            cout << str.size();
    }
}

541. 反转字符串 II - 力扣(LeetCode)

思路:双指针

s[i] 的字符与 s[N - 1 - i] 的字符发生了交换的规律,因此我们可以得出如下双指针的解法:

class Solution 
{
public:
    void reverseString(vector<char>& s) 
    {
        int n = s.size();
        for (int left = 0, right = n - 1; left < right; ++left, --right) {
            swap(s[left], s[right]);
        }
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2052192.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3-4 RGB LED(智能应用篇)

3-4 RGB LED&#xff08;智能应用篇&#xff09; 3-4 RGB LEDRGB-LED及电路示例程序效果演示 3-4 RGB LED Led的灯珠和灯带&#xff0c;相当于点和线&#xff08;可以画出丰富否画面&#xff09; 主要介绍led灯珠 RGB-LED及电路 RGB-LED可以发出红、绿、蓝色的光芒&#xff0…

Flutter 09 Future 和 Stream

一、Future 和 Stream 是处理异步操作的两个重要概念&#xff1a; Future&#xff1a; Future 用于表示一个延迟操作的值或错误&#xff0c;即异步操作的结果。通过 Future&#xff0c;可以在异步操作完成后获取其结果。可以使用 async 和 await 关键字来处理 Future&#xf…

Cisco Catalyst 8000v Edge Software, IOS XE Release IOSXE-17.14.01a ED

Cisco Catalyst 8000v Edge Software, IOS XE Release IOSXE-17.14.01a ED Cisco Catalyst 8000V 边缘软件 - 虚拟路由器 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-catalyst-8000v/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&…

Redis笔记-分布式存储方案中哨兵模式配置

以前在系统分析师中学习到了Redis哨兵模式&#xff0c;只知道其中基本概念&#xff0c;但不知道怎么去配这个&#xff0c;今天看到某项目&#xff0c;特意记录下其配置过程。哨兵模式比主从模式&#xff0c;更具有容错性。 Redis分布式存储方案 分布式存储方案 核心特点 主从…

centos 7.9 迁移到 openEuler22.03-LTS-SP3

openEuler移植案例 | 移植操作指南 | openEuler社区官网 cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) 需要两台机器&#xff0c; 不通过原因 在待升级节点检查是否有安装x2openEuler-core时, 发现已经安装了,不能作为升级节点。该节点为&#xff1a; 解…

开发日记:Object-c 中的 NSString 和 NSMutableString的常用方法

今天讲不可变数组 NSArray 可变数组 NSMutableArray。话不多说&#xff0c;直接上干货。 oc中的数组 可变数组 NSMutableArray使用初始化方法创建可变数组使用便利构造器创建可变数组可变数组追加元素可变数组追加一个不可变数组可变数组删除一个元素可变数组删除指定下标的元素…

IPD推行成功的核心要素(十七)矩阵型组织架构设计实现多组织协同以便快速抓取市场机会

随着企业规模不断增长&#xff0c;业务越来越复杂&#xff0c;组织架构对企业高效运作的影响也越来越大。加之企业所处的市场环境瞬息万变&#xff0c;机会稍纵即逝。传统金字塔型的组织架构&#xff0c;完全无法满足这样快速灵活的要求。而IPD体系设计了产品线&#xff08;IPM…

decoy靶机复现

靶机设置 设置网卡ens33 设置靶机为NAT模式 靶机IP发现 nmap 192.168.112.0/24 靶机ip为192.168.112.149 端口扫描 nmap 192.168.112.149 -p- -sV -O -Pn 访问浏览器 默认是8080&#xff0c;需要更改为80端口 下载好之后发现解压需要密码 破解密码 将该安装包放到kali中…

配置Prettier+Vscode setting提高前端开发效率

前言 大家好&#xff0c;上一篇一文读懂 系列的文章中我们介绍了前端的代码格式化校验工具ESLient。代码格式是进行自动校验了&#xff0c;但你还要一个个的微调&#xff0c;很麻烦不是吗&#xff1f; 本文介绍和ESLient配合使用的Prettier实现编译器自动将代码格式化。 同时也…

Nat Methods编委:积极探索AI与生物学交叉的高质量基于人工智能方法的论文发表|顶刊速递·24-08-19

小罗碎碎念 今天分享的这篇文献&#xff08;特刊&#xff09;发表于《Nat Methods》&#xff0c;目前IF36.1。 分享这篇文献是临时做的决定&#xff0c;因为在朋友圈看到有关这篇特刊的介绍&#xff0c;对标题很感兴趣&#xff0c;所以我立刻找到对应的文章来详细分析一下。 在…

Leetcode JAVA刷刷站(35)搜索插入位置

一、题目概述 二、思路方向 为了实现这一功能&#xff0c;我们可以使用二分查找的变种来找到目标值或确定其应插入的位置。在二分查找过程中&#xff0c;我们不仅检查中间元素是否等于目标值&#xff0c;还根据比较结果更新搜索的上下界。如果目标值大于中间元素&#xff0c;则…

一文带你从源码中学习那些实用的位运算技巧

写在文章开头 众所周知位运算执行效率高于常规运算,通过不同的位运算搭配可以让我们写出简洁高效的代码表达式,所以本文从各大开源项目的源码中介绍一下各类运算技巧及其使用场景。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是…

【体检】程序人生之健康检查,全身体检与预防疫苗,五大传染病普筛,基因检测等

程序员养生指南之 【体检】程序人生之健康检查&#xff0c;全身体检项目分类&#xff0c;五大传染病普筛&#xff0c;基因检测等 文章目录 一、全身体检与预防疫苗&#xff08;年检&#xff09;1、实验室检测&#xff1a;生化全套检查2、医技检查&#xff1a;辅助诊疗科室3、科…

【Python实现禁用任务管理器】

效果展示&#xff1a; 代码及解析&#xff1a; 提示&#xff1a;使用pyinstaller打包可以避免弹窗&#xff0c;食用更佳哦 提示(2)&#xff1a;运行后要等待一段时间再关机哦 禁用代码&#xff1a; 要禁止任务管理器关闭 Python 程序&#xff0c;可以通过修改注册表来实现。以…

【OpenCV_python】凸包检测 轮廓特征 直方图均衡化 模板匹配 霍夫变换

凸包特征检测 凸包就是图像的最小外接多边形&#xff0c;通过图像的轮廓点&#xff0c;找到距离最远的两个点的直线&#xff0c;根据直线找到距离最远的下一个点&#xff0c;直到所有的点被包围在多边形内 读取图像二值化找图像的轮廓获取凸包点的坐标绘制凸包点 convexHull 获…

bilibiliDown-纯净B站视频解析提取工具

软件简介 bilibiliDown是一款简洁好用的B站视频下载工具&#xff0c;支持由UP主上传的单集&#xff0c;多集以及相关封面&#xff0c;弹幕&#xff0c;字幕&#xff0c;音乐&#xff0c;刮削等等&#xff0c;支持任意粒度批量组合&#xff0c;登录后支持到1080P&#xff0c;大…

Git Merge 实例教学:同步代码库与处理分支冲突的最佳实践

文章目录 前言一、git merge是什么&#xff1f;二、git merge基本用法1. 合并两个分支2. 合并时创建合并提交3. 快进合并&#xff08;Fast-forward Merge&#xff09;4. --abort参数5. --continue参数6. -X theirs参数 三、实际例子1. 更新仓库2. 将origin/main分支合并到当前分…

podman安装过程记录

最近注意到podman兼容docker镜像包&#xff0c;于是好奇心的驱动下&#xff0c;研究了一下 本来以为podman的desktop跟docker一样&#xff0c;最后发现podman桌面版是轻量级的&#xff0c;还需要安装podman的服务&#xff08;当然&#xff0c;是支持直接通过它的桌面版来安装其…

Linux系统中用户、用户组及文件权限的常用知识汇总

Linux为多用户多任务的操作系统&#xff0c;文件权限管理十分重要&#xff0c;每一个文件都有很多属性&#xff0c;合理的权限设置&#xff0c;可以确保数据不被未授权的人员访问&#xff0c;同时也能提高系统安全性。 本文将介绍Linux系统中用户、用户组及文件权限的常用知识…

【C++二分查找 前缀和 】1292. 元素和小于等于阈值的正方形的最大边长

本文涉及的基础知识点 C二分查找 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode1292. 元素和小于等于阈值的正方形的最大边长 给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold。 请你返回元素总和小于或等于阈值的正…