c++ String 用法详解 (全面解析)

article/2025/8/15 4:17:22

一。string的初始化
首先要定义它的头文件

#include<string>

string类是一个模板类,位于名字空间std中,通常为方便使用还需要增加:

using namespace std;

然后我们先将声明一个string类型变量的操作

 string  a;a = "hello";//给a赋值 “hello”char b[]="world";string a1(a);//调用构造函数生成a1,a1是a的复制cout << a1 <<endl;string a2 (a,2);//这个意思是从a的第二个字符开始复制cout << a2 <<endl;string a3(a,2,2);//这个意思是从a的第二个字符开始复制两个字符cout << a3 <<endl;string a4(b);//这是以b字符串作为初值cout << a4 <<endl;string a5(b,3);//这是将b字符串的前三个作为初值cout << a5 <<endl;string a6(5,'c');//这是以5个字符c作为初值cout << a6 <<endl;string a7(a.begin(),a.begin()+2);//以区间a.begin()到a.begin()+2之间的字符为初值cout << a7 <<endl;

结果
结果
二。string的比较操作,首先对于string型的字符串,它的比较是很简单的,不用去记那些c中字符串的
比较函数,只要用>,<,==,>=这些数学符号就可以。还可以可以用+或者+=操作符连接两个字符串

string  a;a = "hello";//给a赋值 “hello”if(a=="world")cout << "yes" <<endl;elseif(a>"world"){cout << "You win."<< endl;}elsecout << "You failed."<< endl;a+=" world";cout << a<<endl;

结果
在这里插入图片描述
三。string的查找操作
查找函数是a.find(),里面可以是一个字符,也可以是字符串,如果找到返回第一个出现的位置,如果找
不到返回-1这个是从前往后查找
还有一个是a.rfind(),这个和find()的操作一样,返回值也一样,这不过他是从后往前查找
find函数:从头查找

str.find(‘A’)——查找 ‘A’
str.find(“ABC”)——查找 “ABC”
int n=s4.find(“ABC”); s4:ABCD -> n = 0

str.find(‘B’,1)——从 位置1 处,查找’B’
str.find(“ABC”,1,2)——从 位置1 处,开始查找 ‘ABC’ 的前 2个 字符
rfind函数:从尾部查找

str.rfind(‘A’)——查找 ‘A’
str.rfind(“ABC”)——查找 “ABC”
int n=s4.rfind(“ABC”); s4:AAAABCD -> n = 3

str.rfind(‘B’,1)——从 位置1 处,向前查找’B’
str.rfind(“ABC”,1,2)——从 位置1 处,开始向前查找 ‘ABC’ 的前 2个 字符

 string  a="hello";int b;b=a.find("o");//查找字符o在a中的第一个位置cout << b <<endl;b=a.find("ell");//查找字符串"ell"在字符串a中第一次出现的位置cout << b <<endl;b=a.find("elu",0,2);//从下标0开始查找"elu"字符串的前两个字符cout << b <<endl;b=a.find("d");cout << b <<endl;//当找不到时返回-1b=a.find("o",5);//从下标5开始往后查找查找cout << b <<endl;b=a.rfind("l");//查找字符l在a中从后往前的第一个位置cout << b <<endl;b=a.rfind("ell");//查找字符串"ell"在字符串a中从后往前第一次出现的位置cout << b <<endl;b=a.rfind("l",2);//从第五个字符开始向前查找cout << b <<endl;//查找s 中flag 出现的所有位置。char flag[]="l";int position=0;int i=1;while((position=a.find(flag,position))!=-1){cout<<"position  "<<i<<" : "<<position<<endl;position++;i++;}

结果
在这里插入图片描述
四。string字符串和数值的转换
在做题中我们总会遇到一些整数转字符串或者字符串转整数类型的操作,这里就用string实现这一操

1.string和数值转换 转换类型
to_string(val) 把val转换成string
stoi(s,p,b) 把字符串s从p开始由b进制转化为十进制的int
stol(s,p,b) 把字符串s从p开始由b进制转化为十进制的long
stoul(s,p,b) 把字符串s从p开始由b进制转化为十进制的unsigned long
stoll(s,p,b) 把字符串s从p开始由b进制转化为十进制的long long
stoull(s,p,b) 把字符串s从p开始由b进制转化为十进制的unsigned long long
stof(s,p) 把字符串s从p开始转换成float
stod(s,p) 把字符串s从p开始转换成double
stold(s,p) l把字符串s从p开始转换成long double

#include <bits/stdc++.h>
#include <map>
using namespace std;
int main(){string s="222.22";cout<<"s="<<s<<endl;int a = 222;int ot = stoi(s,0,10);int ol = stol(s,0,10);float of = stof(s,0);double od = stod(s,0); cout<<"ot="<<ot<<endl;cout<<"ol="<<ol<<endl;cout<<"of="<<of<<endl;cout<<"od="<<od<<endl;return 0;
}

在这里插入图片描述
2.
数值转换为字符串

#include <string>
#include <sstream>
#include <iostream> 
using namespace std;
int main(){double a = 123.32;string res;stringstream ss;ss << a;ss >> res;//或者 res = ss.str();cout<<res; return 0;
}

在这里插入图片描述
大神链接

五。string常用成员函数
assign函数:
str.assign(“ABC”)——清空字符串,并设置为 “ABC”
str.assign(“ABC”,2)——清空字符串,并设置为"AB",保留两个字符
str.assign(“ABC”,1,1)——清空字符串,设置为 “ABC” 中的从 位置1 开始,保留 1个 字符
str.assign(5,‘A’)——清空字符串,然后字符串设置为 5个 ‘A’
str.length()——求字符串长度
str.size()——和 length() 一样
str.capacity()——获取容量,包含了不用增加内存就能使用的字符数
str.reasize(10)——设置当前 str 的大小为10,若大小大与当前串的长度,\0 来填充
str.reasize(10,char c)——设置当前 str 的大小为10,若大小大与当前串的长度,字0符c 来填充
str.reserve(10)——设置str的容量 10,不会填充数据
str.swap(str1)——交换 str1 和 str 的字符串
str.push_back(‘A’)——在str末尾添加一个字符 ‘A’ ,参数必须是字符形式
str.append(“ABC”)——在str末尾添加一个字符串 “ABC”,参数必须是字符串形式
insert函数方法:

str.insert(2,3,‘A’)——在str下标为2的位置添加 3个 字符’A’
str.insert(2,“ABC”)——在str下标为2的位置添加 字符串 “ABC”
str.insert(2,“ABC”,1)——在str下标为2的位置添加 字符串 “ABC” 中 1个 字符
str.insert(2,“ABC”,1,1)——在str下标为2的位置添加 字符串 “ABC” 中从位置 1 开始的 1 个字符
注:上个函数参数中加粗的 1 ,可以是 string::npos,这时候最大值,从 位置1 开始后面的全部字符

str.insert( iterator pos, size_type count, CharT ch )——在 str 中,迭代器指向的 pos位置 插入 count个 字符 ch
s4.insert(++str1.begin(),2,‘a’); 结果:s4:ABCD -> AaaBCD

str.insert( iterator pos, InputIt first, InputIt last )——在 str 中,pos位置 插入 str1 的 开始位置 到 结束为止
s4.insert(s4.begin(),str1.begin(),str1.end()); 结果:s4:ABCD str1:abc -> abcABCD

str.erase(2)——删除 下标2 的位置开始,之后的全删除
str.erase(2,1)——删除 下标2 的位置开始,之后的 1个 删除
str.clear()——删除 str 所有
str.replace(2,4,“abcd”)——从 下标2 的位置,替换 4个字节 ,为"abcd"
str.empty()——判空(空返回1,非空返回0)

string a="hello world";cout << a<<endl;a.assign("ABC");cout << a<<endl;a.assign("ABC",2);cout << a<<endl;a.assign("ABC",1,1);cout << a<<endl;a.assign(5,'A');cout << a<<endl;int d;d=a.length();cout <<d <<endl;d=a.size();cout <<d <<endl;string b="BBBBB";cout << a << " "<< b <<endl;a.swap(b);cout << a << " "<< b <<endl;a.push_back('B');cout << a<<endl;a.append("ABC");cout << a<<endl;a.insert(2,3,'A');cout << a<<endl;a.insert(2,"ABC");cout << a<<endl;a.insert(2,"ABC",1) ;cout << a<<endl;a.insert(2,"ABC",1,1);cout << a<<endl;a.erase(2);cout << a<<endl;a=b;a.erase(2,1);cout << a<<endl;a=b;a.clear();cout << a<<endl;a=b;a.replace(2,4,"abcd");cout << a<<endl;a=b;d=a.empty();cout << d <<endl;

结果:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/rkAgjIWN.shtml

相关文章

string的使用介绍

目录 标准库中的string类 string类(了解) 编码介绍 string类的常用接口说明 Member functions 测试一&#xff1a;创建对象 测试二&#xff1a;遍历字符串 Iterators 测试三&#xff1a;反向迭代器(Iterators) Capacity 测试四&#xff1a;容器相关(Capacity) 测试…

STL之string用法详解

2.1 string容器介绍 string也属于STL常用容器之一&#xff0c;因此vector&#xff08;参考博客&#xff09;中的大部分方法与迭代器都适用于string容器。string容器用于保存字符串&#xff0c;使用一组连续的内存单元来存放字符串中的每个字符&#xff0c;因此也支持随机访问与…

String用法详解

string类 声明 string类本不是STL的容器&#xff0c;但是它与STL容器有着很多相似的操作&#xff0c;因此&#xff0c;把string放在这里一起进行介绍。 之所以抛弃char*的字符串而选用C标准程序库中的string类&#xff0c;是因为他和前者比较起来&#xff0c;不必担心内存是否…

string 的常见用法详解

目录 1.string 的定义 2.string 中内容的访问 3.string 常用函数实例解析 在C语言中&#xff0c;一般使用字符数组 char str[]来存放字符串&#xff0c;但是使用字符串数组有时会显得操作麻烦&#xff0c;在C中加入了string类型。 注意&#xff0c;如果要使用string&#xf…

【C++】STL常用容器总结之十二:string类

13、string类 声明 string类本不是STL的容器&#xff0c;但是它与STL容器有着很多相似的操作&#xff0c;因此&#xff0c;把string放在这里一起进行介绍。 之所以抛弃char*的字符串而选用C标准程序库中的string类&#xff0c;是因为他和前者比较起来&#xff0c;不必担心内…

string的常用用法详解

一般我们在C语言中用到字符串&#xff0c;都是使用字符数组来存放&#xff0c;但是操作字符数组有时候会不便&#xff0c;所以为了方便操作&#xff0c;在C的STL中加入了字符串类型&#xff08;string&#xff09;。 想要复习以往字符数组的相关知识点请点击以下链接&#xff…

对于String的用法详解

目录 一、String的基本用法 二、对于字符串常量池的理解。 三、String类的常见操作。 四、StringBuffer和StringBuilder的使用。 一、String的基本用法 1.1String的创建方法 //第一种创建方法 String str"Hellow"; System.out.println(str);//第二种创建方法 S…

String类的常见用法

目录 1、创建字符串的四种方式&#xff1a;(方式一和方式四最常用&#xff09; 2、字符串的字面量&#xff08;也是字符串的对象&#xff09; 3、字符串比较 4、关于字符串的常量池问题 5、手工入池—String 类提供的 intern 方法 6、字符串的不可变性&#xff1a; 7、修…

非抢占式多级反馈队列优先级调度算法 C++实现

介绍 前段时间比较忙&#xff0c;没有更新&#xff0c;这次的也是操作系统的一个实践作业 C实现非抢占式多级反馈队列优先级调度算法&#xff0c;希望可以帮到你们。 问题介绍 这里我用课件里的内容 1.应设置多个就绪队列&#xff0c;并为每个队列赋予不同的优先级。第一个队…

多级反馈队列算法补充

http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-sched-mlfq.pdf 本文是多级反馈队列&#xff08;multi-level feedback queue&#xff0c;MLFQ&#xff09;算法的一些小补充&#xff08;两个缺陷与修改方法&#xff09;&#xff0c;参考了上面链接。因为自己用中文没有搜到想要的…

操作系统-多级反馈队列

概述 1962年&#xff0c;Corbato首次提出多级反馈队列&#xff0c;应用于兼容时分共享系统(CTSS)。Corbato因在CTSS中的贡献和后来在Multics中的贡献&#xff0c;获得了ACM颁发的图灵奖(Turing Award)。该调度程序经过多年的一系列优化&#xff0c;出现在许多现代操作系统中。 …

操作系统学习(二):浅析多级反馈队列MLFQ

目录 0、引言 1、多级反馈队列&#xff08;MLFQ&#xff09;的基本规则 2、MLFQ的规则具体说明 3、MLFQ调优及其他问题 4、总结 0、引言 在上篇文章操作系统学习&#xff08;一&#xff09;&#xff1a;浅析操作系统进程调度算法中讲到&#xff0c;在一个通用的操作系统中…

多级反馈队列调度算法(附Python3实现代码)

一、多级反馈队列调度算法 多级反馈队列调度算法是进程调度的一种算法&#xff0c;该调度算法可以不用事先知道各种进程所需的执行时间&#xff0c;还可以较好的满足各种类型进程的需要&#xff0c;是目前共认的一种较好的进程调度算法。 那你可能马上就要问了&#xff0c;多…

调度:多级反馈队列

多级反馈队列&#xff08;Multi-level Feedback Queue, MLFQ&#xff09;是有Corbato在1962年提出的&#xff0c;用于兼容时分共享系统。现在其经过多年的优化&#xff0c;已经被应用于很多现代操作系统中。多级反馈队列是为了解决两方面问题。一&#xff1a;优化周转时间。在之…

多级队列调度和多级反馈队列调度算法的实现

多级队列调度算法 操作系统实验导航 实验一&#xff1a;银行家算法 https://blog.csdn.net/weixin_46291251/article/details/115384510 实验二&#xff1a;多级队列调度和多级反馈队列调度算法 https://blog.csdn.net/weixin_46291251/article/details/115530582 实验三&…

多级反馈队列调度算法模拟实现

实验一 多级反馈队列调度算法 一. 主要实现方法和代码介绍 ​ 1.编写进程类,其只包含所需的运行时间和进程编号两个属性,还有一个运行方法,此方法就是将所需的运行时间属性减去.传入的运行时间. ​ 2.创建进程函数:创建maxp个进程,(应该不超过10,在此创建九个,即暂时不进行进…

计操实验 多级反馈队列C语言

计操实验 多级反馈队列C语言 需求&#xff1a; 1.队列4级&#xff0c;每一级的队列长度均为10&#xff1b;第一级的时间片为T&#xff0c;第二级的时间片为2T&#xff0c;第三级的时间片为4T&#xff0c;第四级的时间片为8T&#xff1b;&#xff08;T的大小自己定&#xff09; …

【操作系统】轮转和多级反馈队列

随着计算机的技术逐渐步入家用后&#xff0c;新的调度指标接踵而来&#xff0c;周转时间已经不能满足人们日常工作的需求&#xff0c;更多时候人们更希望计算机能有更好的交互性&#xff0c;使其能更快地去响应任务&#xff0c;由此针对优化响应时间的调度策略也遍地开花&#…

多级反馈队列调度算法(c++)

如果对你有帮助&#xff0c;可以给卑微的博主留个赞、关注、收藏 (不是) (骗一下数据&#xff0c;说不定以后面试就过了&#xff0c;拜谢) 操作系统基本调度算法&#xff0c;多级反馈队列调度算法。在划分时间片的调度算法中&#xff0c;多级反馈队列算法兼顾提高系统吞吐…

多级反馈队列调度算法

实验目的&#xff1a; 在Linux下编程实现多级反馈队列调度算法&#xff0c;采用三级调度策略&#xff0c;所有进程先按到达顺序进入一级队列&#xff0c;按照时间片为2轮转一次&#xff0c;一个时间片内未完成的进程被依次移入二队列尾部。当一级队列中没有进程时&#xff0c;开…