在C语言中,一般使用字符数组char str[]来存放数组
但是使用字符数组有时会显得操作麻烦
而且容易因经验不足而产生一些错误
因此为了更方便地对字符串进行操作
c++在STL中加入了string类型
对字符串的需求功能进行了封装
使得操作更方便,不易出错
但是如果要使用string
必须加上#include<string>
using namespace std;(与string.h不同)
1、string的定义
string str(直接加变量名)
初始化
(直接赋值)
string str="abcd"
2、string中内容的访问
①通过下标访问
(像字符数组一样)
如果要输入和输出,只能用cin和cout
tips:用c_str()将string类型转换为字符数组进行输出即可用printf
printf("%s\n",str.c_str());
②通过迭代器访问
譬如insert()、erase()这些函数要求以迭代器为参数进行访问
由于string不像其他STL容器那样需要参数,因此可以直接如下定义:
string::iterator it;
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
string str="abcd";
for(string::iterator it=str.begin();it!=str.end();it++)
{
printf("%c",*it);
}
return 0;
}
string和vector一样,支持直接对迭代器进行加减某个数字
如str.begin()+3是可行的
3、string常用函数
①operator+=
这是string的加法
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1="abc",str2="xyz",str3;
str3=str1+str2;
str1+=str2;
cout<<str1<<endl;
cout<<str3<<endl;
return 0;
}
②compare operator
两个string类型可以直接使用=、!=、<、<=、>、>=比较大小
比较规则是字典序
③length()/size()
length()返回字符串的长度
即存放的字符数
与size()基本相同
④insert()
a.insert(pos,string)
在pos号位置插上字符串string
e.g. str.insert(3,str2);//往str[3]处插入str2
b.insert(it,it2,it3)
it为原字符串的欲插入位置,it2和it3为待插字符串的首尾迭代器
用来表示[it2,it3)将被插在it的位置上
⑤erase()
a.删除单个元素
str.erase(it)用于删除单个元素,it为需要删除的元素的迭代器
str.erase(str.begin()+4);
b.删除一个区间内的所有元素
一、str.erase(first,last)
str.erase(str.begin()+2,str.end()-1)
二、str.erase(pos,length)
pos为需要开始删除的起始位置,length为删除的字符个数
⑥clear()
str.clear()
清空
⑦substr()
substr(pos,len)返回从pos号位开始、长度为len的子串
⑧string::npos
是一个常数,其本身的值为-1
但由于是unsigned_int类型
因此实际上也可以认为是unsigned_int类型的最大值
string::npos用以作为find函数失配时的返回值
⑨find()
str.find(str2),当str2是str的字串时,返回其在str中第一次出现的位置;
如果str2不是str的字串
那么返回string::npos
str.find(str2,pos),从str的pos号位开始匹配str2,返回值与上相同
⑩replace()
str.replace(pos,len,str2)把str从pos号位开始、长度为len的子串替换为str2
str.replace(it1,it2,str2)把迭代器[it1,it2)范围的字串替换为str2