STL - string用法总结

STRING数据库使用教程.pdf 数据库使用教程 立即下载

(我的STL相关的博客目录:https://blog.youkuaiyun.com/Kprogram/article/details/90408011)

(string-c++官网:http://www.cplusplus.com/reference/string/string/?kw=string)

stirng有什么使用价值呢?

字符数组是C中非常常用而又麻烦的一个东西:

    如果分配的初始空间不够,会造成字符丢失和数组越界;

    如果没有很好的初始化(如初始化为'\0'),也可能会造成数组越界,打印时可能还会显示奇怪的字符;

    即使做好了各种细节工作,对其的变换和比较等操作也是很麻烦。

于是C++提供了string类:

    它长度不定,且拥有很多实用的成员函数,能在很多地方完美地替代字符数组,是一个非常便捷的东西。

    它能方便的和字符数组互相转换:string 可以直接就被赋值于字符数组(char a[10]; string s = a),而copy函数可以把string中的字符复制到字符数组中(末尾有使用详解)

接下来我来讲解string的使用方法:

0 - 头文件:string  命名空间:std

#include <string>
using namespace std;

1 - 声明一个string,并为其赋值

    string 有多种赋值方法:

1.不赋值:
string s0;
2.初始化时赋值:
string s1 = "deep";
string s2("dark");
string s4(10, "fantacy");
string s3 = s2; //拷贝
3.用字符数组赋值:
char sz[100];
scanf("%s", sz);
string s5 = sz;
4.用cin赋值:
string s6;
cin >> s6;

2 - 便捷的成员函数 ( 假设你创建的string对象名字叫 S )

    (红色为重要函数,粉色为常用函数,带* 的为很少使用的函数,大部分情况下红+粉红函数就够用了)

容量和尺寸:

    size():返回字符串的尺寸,因为是以byte为单位的,所以可能不是字符的实际数量(但ASCALL字符串的尺寸一定是其长度)

        length():跟size作用一毛一样(官网上说的哈,我也实验过了)

        maxsize():返回字符串的最大尺寸,没啥用(虽然string长度可变,但为了省时,它会预分配一些多的空间,所以maxsize >= size)

    empy():如果字符串为空,返回True, 反之则返回 False。

    clear():变为空串。

    resize(n):重新设置字符串的长度,如果n小于size,则保留前n个字符。反之,随便增加字符到n,或者增加指定字符:S.resize(n, 'c')

    *capacity():返回string的容量大小,容量不同于size,如果元素的数量超过了容量string会重新分配内存,以存储更多的元素,而且会造成一些影响。

    *reserve(n):重置string的容量,如果n小于容量,则不会造成影响,这个函数也没啥用。

    *shrink_to_fit():缩小容量至其等于size。

元素:

    S[n]:跟数组一个道理。

    back():返回最后一个元素的引用(意味着可以用V.back() = data修改末尾元素值)

    front():返回第一个元素的引用

    at(n):返回第n个元素的引用

修改操作:

    insert():插入字符串

string str="to be question";
string str2="the ";
string str3="or not to be";
               //插入方法和插入之后的结果
//插入于第六个字符处
str.insert(6,str2);                 // to be (the )question
//把str3的第3个字符向后数4个字符插入
str.insert(6,str3,3,4);             // to be (not )the question
//插入8个字符
str.insert(10,"that is cool",8);    // to be not (that is )the question
str.insert(10,"to be ");            // to be not (to be )that is the question
str.insert(15,3,':');               // to be not to be(:::) that is the question

    erase(n):删除第n个字符

        erase(a, b):删除[a, b]内所有字符

    replace():替换字符串

string base="this is a test string.";
string str2="n example";
string str3="sample phrase";
string str4="useful.";

string str=base;           // "this is a test string."
//从str的第9个往后数5个的字符串被替换
str.replace(9,5,str2);          // "this is an example string." (1)
//同理,把str3的第7个后数6个字符用来替换
str.replace(19,6,str3,7,6);     // "this is an example phrase." (2)
str.replace(8,10,"just a");     // "this is just a phrase."     (3)
str.replace(8,6,"a shorty",7);  // "this is a short phrase."    (4)
//重复三次
str.replace(22,1,3,'!');        // "this is a short phrase!!!"  (5)

    operator+=:在字符串后面添加字符串。

        append(string):同上,括号内可以是string对象,也可以是一串字符。

        operator+:可以把两个字符串相加

string S = "123";
S += "456"; 或 S.append("456")
cout << S << endl;
//output:
123456

    push_back(char):添加一个字符到向量的末尾

        pop_back():删除末尾字符

    S.swap(S1):交换 S 和 S1 两个string

    *assign():不太用的上,实在想了解点这里>useless<

字符串操作:(有匹配子串,比较等重要函数)

    compare(str):比较两个字符串,相同返回1,不同返回0。参数的设置和replace原理相同!

string str1 ("green apple");
string str2 ("red apple");

1.比较整个字符串
str1.compare(str2)

2.比较第6个字符开始到往后数5个字符(apple)
str1.compare(6,5,"apple")

3.把str2的第4个字符开始到往后数5个字符(也是apple)用来比较
str1.compare(6,5,str2,4,5)

    find():在字符串中寻找给定的字符串,返回的是找到的第一个匹配子串首位置,若没找到,返回string::npos(其实是一个无符号整形)

        rfind():同find相反,返回的是最后一个匹配子串的位置。

1.从头寻找
unsigned int found = str.find(str2);
if (found!=string::npos)
  cout << "first 'needle' found at: " << found << '\n';

2.从第n个字符处开始寻找
found=str.find("needles are small",found+1,6);
if (found!=string::npos)
  cout << "second 'needle' found at: " << found << '\n';

可以用此方法替换掉第一个needles
str.replace(str.find(str2),str2.length(),"preposition");

    substr():裁剪字符串,返回裁剪下来的内容。对被裁剪的字符串不产生影响。

        substr(a, b)裁剪下a - b的字符; substr(n)裁剪下n之后的字符

    copy():与substr不同,它是用把string上的字符拷贝到char[]里。(注意,参数的顺序跟上面那些函数有点不同)

char buffer[20];
string str ("Test string...");
从第5个字符开始,拷贝6个字符到buffer中
size_t length = str.copy(buffer,6,5);
buffer[length] = '\0';
scout << "buffer contains: " << buffer << '\n';
//out put:
string

    find_first_of(str):在字符串中搜索与参数中指定的任何字符匹配的第一个字符。(比如str = "123",它就返回1,2 或者 3这三个字符之一在字符串里面最先出现的地方,例:"a2aa",返回1;"abc321ad" 返回3)

        find_last_of(str):同理,不过是从后面开始找

        find_first_not_of(str);这时候是找不在str里面的字符的第一个位置了

        find_last_not_of(str):同理

 

string类还有关于迭代的函数,这里不进行讲解。

    

雷达仿真:FMCW TDMA-MIMO 3D点云获取方法 2 信号建模摘要:通过设置时分复用(TDMA)波形结合FMCW毫米波雷达仿真获取目标的距离、速度和方位角3D点云信息。在本案例中,首先通过发射天线交替发射FMCW波形并通过接收天线依次接收回波信号从而得到雷达原始数据,其次对获取的原始数据依次经行距离、速度、角度估计从而输出目标的3D点云。阅读本文档,你将对TDMA-MIMO雷达的基本原理、毫米波雷达距离估计、速度估计以及角度估计的基本原理有所了解,另外CA-CFAR恒虚警以及MUSIC-DOA估计在本案例中也有所涉及。1 TDMA-MIMO原理。 阅读详情

相关推荐

Basilisk库教程

要在仿真中执行模块,其调度由Basilisk的[Process]和[Task]容器控制。BSK[Task]包含一系列模块,这些模块都以相同的更新频率执行。一个[Process]本质上是一个任务组,可以包含多个相关的任务。例如,在多星仿真中,你可以为每颗卫星创建一个[Process],以便将相关任务和嵌入式模块有序地组织起来。下图展示了一个示例布局,其中bskSat卫星的动力学被添加到与飞行软件(FSW)算法分开的进程中,这些算法在该卫星上执行。在每个进程中,设置了若干任务,这些任务以指定的频率进行评估。

weixin_57997461的博客 1136

C++ std :: stringbuf (tcy)

1.1.字符串流缓冲区String stream buffer typedef basic_stringbuf <char> stringbuf; 流缓冲区以读取和写入 串对象 1.2.说明: 此类的对象在内部维护一个字符序列,它们用作它们的关联输入序列和/或关联输出序列。 内部序列可以从串 对象,或使用成员复制到一个对象 力量。 继承虚拟成员提.

tcy-阿春 8137

域用户无法修改密码问题的解决方案

问题描述:加域的电脑无法更改密码,提示“无法更新密码,为新密码提供的值不符合字符域的长度、复杂度或历史要求”。 问题原因:域控制器中相关设置问题,主要如下图所示(如启用复杂性、最短期限和强制密码历史) 解决方案:在域控制器中更改对应的密码策略即可: ① 禁用复杂性要求 ② 最短使用期限改为0天 ③ 强制密码历史改为0 如果出现无法更改的情况,如下图箭头所指的图标所示 代表需要在域控制器的组策...

运维日记 3万+

String&及其他类型的传递类型

因为"String&"引申的关于C#传递类型的总结与扩展

DoyoFish的博客 867

半导体领域知识 - 初级入门

半导体领域知识 - 初级入门 知识问答 1. 一个晶圆上根据芯片的大小,可以生产几百、几千、几万个芯片。如下图: 2. 8寸晶圆指的是什么?5nm工艺指的是什么? 8寸晶圆指的是直径为175mm(17.5cm)的晶圆,下面是6/812/18寸晶圆的尺寸以及相关发展历程。目前拥有12寸线的厂商只有5家,一个12寸晶圆厂的成本需要上百亿美金。 5nm工艺指的是在一个具体的芯片上,有很多微型结构(千万、亿级别的晶体管),这些核心基本单元MOS管的栅极宽度尺寸来衡量工艺的精细程度,如果是5nm就被称为5nm工艺

Hello World! 2万+

基于YOLOv8的MVTec AD缺陷检测系统设计与实现

速度快,精度高;支持 anchor-free 架构;支持实例分割和图像分类;模块化代码,易于部署与改进;完美兼容 ONNX、TensorRT 等推理框架;官方支持多平台训练和推理(CPU/GPU)。YOLOv8 是工业视觉检测落地非常理想的选择。MVTec AD(Anomaly Detection)数据集包括15类工业对象,每个对象包括多个子类缺陷(例如 “scratch”, “crack”, “hole”)及正常图像。类别缺陷子类bottlecablecapsule。

YOLO 931

STL (一) string基本用法

C++ STL中的string类是标准库核心组件,提供高效字符串操作。文章详细介绍了string的构造方法(默认、拷贝、子串等)、多种遍历方式(operator[]、迭代器、范围for等)、容量操作(size/capacity/reserve/resize)以及常用功能:元素访问(at)、清空(clear)、插入删除(insert/erase)、查找替换(find/replace)、子串提取(substr)等。特别讲解了字符串输入问题(getline用法)和关系运算符重载,

C/C++技术栈 1万+

EtherCAT主站SOEM -- 19 --Qt-Soem通过CSP模式(周期同步位置模式)控制一个电机转圈圈

以上就是EtherCAT主站SOEM – 19 --Qt-Soem通过CSP模式(周期同步位置模式)控制一个电机转圈圈的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 1996

第二章 字符串String & 数组 & 数据类型

文章目录(一)说说Java中的8大基本类型 & 内存中占有的字节 & 什么是引用类型?(二)什么是拆箱 & 装箱,能给我举栗子吗?(三)知道float和double类型为什么会出现精度丢失的情况吗?(四)基本类型的初始化值为多少?引用类型的初始值为多少?答案解析 (一)说说Java中的8大基本类型 & 内存中占有的字节 & 什么是引用类型? (二)什么是拆箱...

Stay Hungry Stay Foolish 求知若饥 虚心若愚 4712

从数据到行动:客服运营必分析的8大核心维度

服务运营正从被动响应升级为数据驱动型战略体系。客服中心的海量交互数据能精准反映服务效能、客户体验及运营短板,关键在于实现数据的可视化与可操作化。本文系统剖析了八类核心数据指标:1)客户行为数据(CSAT/NPS/投诉内容);2)通话效率指标(AHT/接通率);3)服务质量(质检体系/情绪识别);4)坐席绩效(FCR/客户评价);5)流程与知识库(转接率/工单时效);6)渠道流量分析;7)异常预警机制;8)成本收益模型。通过构建多维数据分析体系,企业可在客户全生命周期管理中实现服务升级、风险防控与资源

2202_75469062的博客 1400

【ComfyUI专栏】ComfyUI 数字人方案-ComfyUI-EchoMimic

EchoMimic是一个基于图片和语音的数字人生成方案,通过ComfyUI节点实现。该方案安装简单,需下载特定模型文件(Unet、AudioProcessor和VAE)并保存本地。相比其他数字人生成方案,其节点操作更简便,支持多种Pose姿态选择,并能结合视频内容进行姿态同步,通过音频同步口型实现动态内容创建。生成的数字人效果直观,适用于快速创建个性化数字形象。

技术与管理的平衡木- 464

C++11中的String&&

String&&并不是指“引用的引用”,也不存在“引用的引用”这种东西。String&& 和 String&是两码事。   String&&是C++11中的特性,叫做“右值引用”。它只能绑定到右值,即临时对象或将销毁的对象。因此可以把String&&所引用的资源强制拿来使用,且不用重新分配空间。即把String&&所引用对象的资源复制给*this。 例子: String& operator

ACMiao的博客 4915

微店构造订单页面,自动化抢票

之前的文章写过微店抢票如何构造订单页面分析,这篇文章在之前的基础上,进行抢票。

猫敷雪 7201

【八】【C++】STL、string类常见用法

STL(Standard Template Library,标准模板库)是C++标准库的一部分,提供了一系列通用的模板类和函数,这些模板类和函数可以用来实现常见的数据结构和算法。STL使得C++程序员能够更高效地编写代码,同时保持代码的可读性和可重用性。容器是用来管理某一类对象的集合。STL提供了多种类型的容器,每种容器都设计用来管理特定类型的对象集合。STL容器分为序列容器和关联容器两大类:序列容器:维护元素的线性顺序。包括vectorlistdequestring等。

m0_74163972的博客 1363

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【C++】【STL】(一)String的用法

string ();//构造一个空的字符串//复制s所指的字符序列//复制s所指序列的前n个字符生成n个c字符的字符串生成str的复制品复制str中从字符位置pos开始并跨越len个字符的部分string s1//构造空字符串string s2("hello string") //复制"hello string"string s3("hello string",3)复制hello string的前3个字符串//生成10个's'字符的字符串//生成s2的复制品。

欢迎来到我的博客,私信我可以一起交流技术 1024

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

用法 stl_STL string容器用法

概述string是C++标准库的一个重要的部分,主要用于字符串处理。C++的算法库对string类也有着很好的支持,并且string类还和c语言的字符串之间有着良好的接口。string概念string是STL的字符串类型,通常用来表示字符串。而在使用string之前,字符串通常是用char表示的。string与char都可以用来表示字符串,那么二者有什么区别呢。string和char*的...

weixin_29443201的博客 135

用法 stl_每日干货丨STL string容器用法

STL string容器用法概述string是C++标准库的一个重要的部分,主要用于字符串处理。C++的算法库对string类也有着很好的支持,并且string类还和c语言的字符串之间有着良好的接口。string概念string是STL的字符串类型,通常用来表示字符串。而在使用string之前,字符串通常是用char表示的。string与char都可以用来表示字符串,那么二者有什么区别呢...

weixin_33935636的博客 76

【C++STL】一文总结String类的常用函数用法总结

📝【C++ STL string类使用指南】 本文系统介绍了C++ STL中string类的核心操作: 1️⃣ 初始化:6种构造方式(空串/拷贝/子串/字符填充等) 2️⃣ 访问方式:下标[]、迭代器(正向/反向)、范围for循环 3️⃣ 容量管理:size()/length()、capacity()、reserve()/resize()区别 4️⃣ 常用操作:插入(push_back/insert)、拼接(append/+)、删除(erase/clear)、替换(replace) 。

tangsl1552的博客 1242

C++ stl中的string的相关用法

string();//构造一个空字符串//复制s所指的字符串//复制s所指字符串的前n个字符//生成有n个c字符的字符串//复制str//str中从字符下标pos开始的len个字符构成的子串string s1;//空字符串//复制"hello string"//复制"hello string"的前3个字符 为"hel"//生成10个'h'字符的字符串 为"hhhhhhhhhh"//s5为复制s2的结果//复制s2中从字符位置0开始5个字符的部分 为"hello"

fallzzzzz的博客 907

C++STL中String全部核心用法—处理字符串必备

std::string 是 C++ 标准库中用于处理字符串的类,提供丰富的字符串操作功能。本文介绍了其基本语法,包括头文件引入、多种构造方法(默认构造、拷贝构造、子串初始化等)、容量管理(size(), reserve(), shrink_to_fit()等)、元素访问([], at(), c_str()等)以及迭代器遍历(begin(), rbegin()等)。std::string 支持动态内存管理,可安全高效地处理字符串操作,是 C++ 中字符串处理的核心工具。

obroccolio的博客 758

【C++深入浅出】STL之string用法详解

从本期开始,我们将进入STL的学习。STL(standard template libaray - 标准模板库)是C++标准库的重要组成部分。其不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。本期我们将要来学习一下STL中的string类,对比一下string和我们之前学习的常量字符串有什么区别。本文的重点在于使用,目标是掌握一些string类的常用接口函数并学会如何使用。之后我们会尝试模拟实现一个string类,理解string的底层实现原理。

忆梦初心的博客 4990

[STL]string常见用法详解

关于C++STL容器string的解析

AryCra_07的博客 1194

stl之string类用法详细总结

标准c++中String类非常强大,合理使用,能极大提高编程效率,下面就对string类的用法进行总结。 头文件 #include String类的构造函数如下: 1)    string s; //生成一个空字符串s 2)    string s(str) //拷贝构造函数生成str的复制品 3)    string s(str,index) //将字符串str内“始于位置index

Hao_09的专栏 1万+

STL string的常见用法

比较两字符串的大小,a<b返回-1,a==b返回0,a>b返回1,按字典序比较。用字符串替换从指定位置开始的指定长度的字符。从字符串末尾开始查找子串,从指定位置开始。将字符串b复制给从a开始的字符数组。返回指定位置的字符,不进行边界检查。删除从指定位置开始的指定长度的字符。在字符串中查找子串,从指定位置开始。返回从指定位置开始的指定长度的子串。返回指定位置的字符,进行边界检查。比较字符串的子串与另一字符串。将字符串赋值为另一个字符串。返回字符串的最后一个字符。返回字符串的第一个字符。在指定位置插入字符串。

2401_86095880的博客 313

C++ STL容器 —— string 用法详解

STL容器——string函数用法详解 写在前面:近期正在重新学习C++的STL容器,因此准备用一些大白话将STL函数的用法详细记录一下,主要介绍一些基本函数是怎么用的,并不涉及原理。写的不好或者理解的有问题, 请见谅. 下面说的 “运行之后” 表示: 运行上个语句之后的结果. 一行如果说的太长的话, 就得拖动下面的进度条才能看到后面的内容 因此将一段话分成了多行,就像现在这种形式 需要头文件...

Ember_Sky 9599

STL 之 string、 vector 、bitset 的基本用法

目录 string vector bitset string 【头文件】 #include<string> 【声明】 string s1; 默认构造函数 s1 为空串 string s2(s1); 将 s2 初始化为 s1 的一个副本 string s3("value"); 将 s3 初始化为一个字符串字面值副本 string s4(n, 'c'); 将 s4...

菜鸡成长史 629

【C++初阶】STL之学习string的用法

STL是C++的标准模板库,里面包含了许多算法和数据结构,例如我们熟悉的顺序表、链表、栈和队列以及一些常见的算法等等,编程者想使用这些就可以直接从库中调用,不必再自己造轮子了。下面为STL内容的一张图:接下来,我们要学习STL中的string。string 是C++的一个类模板,字符串的类模板。要定义一个对象为字符串,就可以用string类型,说明它是一个字符串,相当于字符数组。

2301_77459845的博客 1489
上一篇: STL - emplace 与 push 的区别
下一篇: Python - 爬虫爬取和登陆github
Korpse
博客等级 码龄9年 115粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值