首页 > 编程语言 >C++——STL——string容器

C++——STL——string容器

时间:2024-08-20 19:24:21浏览次数:9  
标签:string STL s1 cout pos C++ type size

string的头文件

#include <string>

string的初始化

1.默认初始化,此时该字符串为空字符串

string s1;

2.s2是s1的副本

string s2(s1)//构造函数

3.等价于s3(s1),则s3是s1的副本

string s3=s1;

4.s4的字面值是"nihao"

string s4("nihao");//构造函数

5.与上行代码是等价的

string s5="nihao"

6.将s6初始化为由连续的n个字符h组成的串

string s6(n,'h');//构造函数

7.调用string的构造函数生成一个临时的string类,再用临时的string类初始化

string s7=string("hello");
string s8(string("hello"));

string的输入

1.cin输入

string s1;
cin>>s1;
cout<<"s1="<<s1<<endl;

缺点:遇到空格便会自动停止,字符串不会记录空格及以后的内容,如下图

 这个时候使用getline就不会出现这样的问题。(注意:使用getline一定要导包)

2.getline输入

string s1;
getline(cin, s1);
cout << "s1=" << s1 << endl;

string容器的大小比较和连接

和char型数组不同,string可以直接使用><==符号来进行比较,同样连接也是

string s1 = "hello";
string s2 = " world";
string s3 = s1 + s2;
cout << s3 << endl;

string中字符的获取

1.传统for循环

string s1="hello"
for (int i = 0; i < s1.size(); i++) {
		cout << s1[i] << "";
	}

2.新特性的for循环

该方法属于c++11的新特性

string s1="hello"
for (auto i:s1) {
		cout <<i<< "";
	}

3.使用迭代器

迭代器类似于指针

string s1 = "hello";
for (auto i = s1.begin(); i != s1.end(); i++) {
	cout << *i << "";
}

string对象的拷贝

1.string s(s1,pos)

string s1="hello world";
string s(s1, 6);
cout << "s=" << s << endl;//world

2.string s(s1,pos,len)

string s1="hello world";
string s(s1, 6, 1);
cout << "s=" << s << endl;//w

3.s.substr ( pos  ,n )

    string s="hello world";
	string s1 = s.substr();
	cout << "s1=" << s1 << endl;
	string s2 = s.substr(0,4);
	cout << "s2=" << s2 << endl;
	string s3 = s.substr(10, 10);
	cout << "s3=" << s3 << endl;
	string s4 = s.substr(11, 5);
	cout << "s4=" << s4 << endl;
	string s5 = s.substr(12, 10);//超出长度,会出现异常,程序无法正常运行
	cout << "s5=" << s5 << endl;

若删除s5后程序运行结果如下:

插入

1.iterator insert ( iterator pos, CharT ch ) 

	string s1="0123456789";
	s1.insert(s1.begin()+5,'a');
	cout << "s1=" << s1 << endl;//01234a56789

因为要插入的内容是char型,所以若是想要插入多个字符,可以利用数组

	string s1="0123456789";
	s1.insert(s1.begin()+5,{'a','b','c'});
	cout << "s1=" << s1 << endl;//s1=01234abc56789

2.void insert ( iterator pos, size_type count, CharT ch)

    string s1="0123456789";
	s1.insert(s1.begin()+5,2,'b');
	cout << "s1=" << s1 << endl;//s1=01234bb56789

3.void insert( iterator pos, InputIt first,InputIt last )

注意:这里的字串区间为【first,last)

    string s1="0123456789";
	s1.insert(s1.begin()+1,s1.begin()+6, s1.begin()+8);
	cout << "s1=" << s1 << endl;//s1=067123456789
	

这里需要注意,输出结果是067123456789

删除

erase

1.erase()

直接将字符串删除为空

2.erase(size_type pos, size_type n)

删除字符串从pos下标开始(包括pos下标)的n个字符

	string s1="0123456789";
	s1.erase(0, 5);
	cout << "s1=" << s1 << endl;//s1=56789
	

3.erase(const_iterator first,const_iterator last)

删除迭代器【first, last)区间的字符

	string s1="0123456789";
	s1.erase(s1.begin()+3, s1.begin() + 5);
	cout << "s1=" << s1 << endl;//s1=01256789

append(末尾)

append只能在string对象的末尾进行插入操作,通过+运算符也可以达到同样效果


	string s1="0123456789";
	s1.append("aaa");
	cout << "s1=" << s1 << endl;//s1=0123456789aaa

替换

1.replace(size_type pos, size_type n, const char* c)

将字符串从下标pos开始删除n个字符,删除后在下标pos处插入c

	const char* ch2 = "abcd";
	string s1="0123456789";
	s1.replace(1, 4, ch2);
	cout << "s1=" << s1 << endl;//s1=0abcd56789

2.replace(size_type pos1, size_type n1, const char* c, size_type n2)

将字符串从下标pos1开始删除n1个字符,删除后在下标pos处插入c的前n2个字符

	const char* ch2 = "abcd";
	string s1="0123456789";
	s1.replace(1, 4, ch2, 1);
	cout << "s1=" << s1 << endl;//s1=0a56789

3.replace(size_type pos, size_type n, string s)

将字符串从下标pos开始删除n个字符,删除后在下标pos处插入s

	string s2 = "abcd";
	string s1="0123456789";
	s1.replace(1, 4,s2);
	cout << "s1=" << s1 << endl;s1=0abcd56789
	

4.replace(size_type pos1, size_type n1, string s, size_type pos2, size_type n2)

将字符串从下标pos1开始删除n1个字符,删除后在下标pos1处插入s从下标pos2开始的n2个字符

	string s2 = "abcd";
	string s1="0123456789";
	s1.replace(1, 4, s2, 2, 2);
	cout << "s1=" << s1 << endl;//s1=0cd56789
	

5.replace(size_type pos1, size_type n1, string s, size_type n2, CharT ch)

将字符串从下标pos1开始删除n1个字符,删除后在下标pos1处插入n2个ch字符

	string s2 = "abcd";
	string s1="0123456789";
	s1.replace(1, 4, 10, '@');
	cout << "s1=" << s1 << endl;//s1=0@@@@@@@@@@56789

判断是否是标点符号

ispunct()

string s1=",01,23,45678,9";
	for (auto i:s1) {
		if (!ispunct(i)) {
			cout << i ;
		}
	}

标签:string,STL,s1,cout,pos,C++,type,size
From: https://blog.csdn.net/immnature/article/details/141361289

相关文章

  • [C++] template+struct 组合使用小技巧
    1.简单说明  struct+template的组合可以让我们使用同一个结构体名称(注意:只是名称相同,但是本质上已经不同了),实现不同的结构体功能,可以将其理解为设计模式中的工程模式。2.代码示例  首先,声明一个枚举类型,用于区别结构体,然后使用template+struct,声明一个结构体,只声明不实现......
  • StringGrid单元格绑定ComboBox、DateTimePicker或窗口传值
    一、初始化控件状态procedureTForm7.FormCreate(Sender:TObject);beginwithStringGrid1dobeginColWidths[0]:=15;Cells[1,0]:='Combobox';ColWidths[1]:=100;Cells[2,0]:='DateTimePicker';ColWidths[2]:=100;......
  • C++基础用法
    容器vector定义#include<vector>usingnamespacestd;vector<type>name;//type为数据类型,如int,string等,name为vector标识访问通过下标访问通过迭代器访问vector<type>::iteratorit;例如:vector<int>::iteratorit=vi.begin();......
  • 从零开始学习C++(0)
    这是什么?要先学习C++,我们要先了解C++是什么这是WikiPedia的解释,我们来提炼一下:C++是一种高级语言。C++是C语言的扩展升级版。C++是面向对象语言。下载环境简单了解一下后,我们来下载C++编译器环境。目前有很多种编译器,例如:Dev-C++CodeBlocksVSCVSred......
  • C++语言基础|函数重载
    C++语言基础|函数重载1.函数重载1.1函数重载的定义1.1函数重载的示例2.函数重载注意事项3重载函数的二义性3.1绑定(匹配)二义性3.2消除二义性3.3注意事项1.函数重载1.1函数重载的定义函数重载就是两个以上的函数,取相同的函数名,但是形参的个数和类型不同,编......
  • C++容器概览
    容器容器是用来存储数据的序列,它们提供了不同的存储方式和访问模式。STL中的容器可以分为三类:1、序列容器:存储元素的序列,允许双向遍历。vector:动态数组,支持快速随机访问。deque:双端队列,支持快速插入和删除。list:链表,支持快速插入和删除,但不支持随机访问。2、关联容器:存......
  • C++基础
    指针#include<iostream>usingnamespacestd;intmain(){//实际变量的声明intvar=20;//指针变量的声明int*addr;//在指针变量中存储var的地址addr=&var;cout<<"var="<<var<<endl;//输出在指针变量中存储......
  • Ros2 MoveIt2 MoveGroup C++接口
     在MoveIt中,最简单的用户界面是通过 MoveGroupInterface 类。它为用户可能想要执行的大多数操作提供了易于使用的功能,特别是设置关节或姿势目标、创建运动计划、移动机器人、将对象添加到环境中以及从机器人上连接/分离对象。此接口通过ROS主题、服务和操作与 MoveGrou......
  • c++超详细教学(5)变量1
    上一节,我们讲到了换行,空格,以及运算,这一节课,我们讲一个高级一点的东西,叫变量。大家不用慌张,名字听着很玄乎,实际上很简单。上次,我给大家讲到了运算,可是如果你每次都改代码,那就显得太不专业了,为了让大家更加专业,我就给大家讲一讲变量。比如,你每次只算一个数字加一,那么我们就可......
  • c++超详细教程(2)你人生中的第一个c++代码
    上节课大家应该都学会了如何安装c++了吧(不会的,评论区留下,我亲自来教你)现在我来教你如何使用c++。首先双击点开DEVC++。是不是什么都没有(我这里调了颜色,所以大家如果是白色或其他颜色也是正确的)我来教大家如何点开代码首先点我所圈的位置就会出现点击“源代码”的选......