C++ STL模板类 string

使用string前,需添加 string 头文件 < string>

定义

string str;
str="faro_z";

如果想要输入一串带空格的string,需要使用getline()

string str;
getline(cin,str);

1.通过迭代器或下标访问
  由于 string 不像其他 STL 容器那样需要参数,因此可以直接如下定义:

string::iterator it;
for(it = str.begin(); it != str.end(); it++)
	cout<<*it<<" ";

string也可以通过下标直接访问,使用下标后,下标元素类型变为char

string str="abc";
cout<<str[1]<<endl;//结果为'b'

string 与 vector 一样,支持直接对迭代器进行加减某个数字,如 str.begin() + 3,效果等同于str[3];

2.operator +=
  这是 string 的加法,可以将两个 string 直接拼接起来:

str3 = str2 + str1;
str1 += str2;

3. compare operator
  两个 string 类型可以直接使用 ==、!=、<、<=、>、>= 比较大小,比较规则是字典顺序。

4.常用函数

1)length()、size()
  都是返回 str 的长度。

str.length()、str.size();

2)insert()
  insert(pos,string):在 pos 号位置插入字符串 string
  insert(it,it1,it2):it 为原字符串的欲插入位置,it2 和 it3 为待插字符的首尾迭代器,用来表示串 [it2,it3) 将被插在 it 的位置上。

str.insert(str.begin() + 3, str2.begin(),str2.end());
//str 中 三号位将被挤到后面去

3)erase()
  erase() 有两种用法:删除单个元素、删除一个区间内的所有元素。

//删除一个元素:
str.erase(it); 
str.erase(str.begin() + 3); 
//删除一个区间
erase[first,last);
str.erase(str.brgin() + 2, str.end() - 1);
或
str.erase(pos,length)
//其中 pos 为需要开始删除的位置,length 为删除的字符个数。
如:string str = "abcdefg";
str.erase(3,2);
//结果:abcfg

4)clear()

str.clear();

5)substr()

substr(pos,len);	//返回从 pos 号位开始,长度为 len 的子串
string s = "abcdefg";
cout << s.substr(0,4) << endl;	//--> "abcd"

6)string::npos
  string::npos 是一个常数,其本身值为 -1,但由于是 unsigned_int 类型,因此实际上也可以认为是 unsigned_int 类型的最大值。string::npos 用以作为 find 函数匹配失败时候的返回值,可以认为 string::npos 等于 -1 或 4294967295。


if(string::npos == -1)
{
	···
}
if(string::npos == 4294967295)
{
	···
}

7)find()
  str.find(str2),当 str2 是 str 的子串时,返回其在 str 中第一次出现的位置,如果 str2 不是 str 的子串,那么返回 string::npos。

str.find(str2,pos);	//从 str 的 pos 号位置开始匹配 str2 ,
//返回值与上相同。

8)replace()

str.replace(pos,len,str2);	//把 str 从 pos 号位置开始,
//长度为 len 的子串替换为 str2。
str.replace(it1,it2,str2);	//把 str 的迭代器 [it1,it2) 
//范围的子串替换为 str2。

了解了(6),(7),(8),我们就可以开始搞一点事情了
熟悉stl模板类,可以帮助我们快速搞定OJ

例1:删除一串字符中选定的内容

void remove(string &str,string tmp)
{
	while(str.find(tmp)!=string::npos)
	{
		int loc=str.find(tmp);
		str.erase(loc,tmp.length());
	}
	return;
}

例2:修改选定字符

void replace(string &str,string beReplaced,string replace)
{
	while(str.find(beReplaced)!=string::npos)
	{
		int loc=str.find(beReplaced);
		str.replace(loc,beReplaced.length(),replace);
	}
	return;
}

最后奉上博客的思维导图
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FARO_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值