string类型是对字符串常见的需求功能进行封装,使得操作起来更加方便,且不易出错。如果使用string需要增加string文件
- string的定义
string str;
初始化
string str="abcd";
- string中内容的访问
通过下标(像字符数组那样)
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string str="abcd";
for(int i=0;i<str.length();i++)
{
printf("%c",str[i]);
}
return 0;
}
//输出结果:abcd
若要读入和输出整个字符串,则只能使用cin和cout
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string str;
cin>>str;
cout<<str;
return 0;
}
但是如果用c_str将string类型转换为字符数组进行输出也是可以使用printf来输出string的
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string str="abcd";
printf("%s\n",str.c_str());//将string类型str使用c_str()转换为字符数组
return 0;
}
//输出结果是abcd
- 通过迭代器访问
有些函数例如insert()与erase()要求以迭代器为参数
可以直接定义
string::iterator it;
得到迭代器it,可以通过*it访问
#include<cstdio>
#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;
}
//输出结果:abcd
常用函数
- operator+=,即string的加法
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string str1="abc",str2="xyz",str3;
str3=str1+str2;
str1+=str2;//将str2直接拼凑到str1上
cout<<str1<<endl;
cout<<str3<<endl;
return 0;
}
//输出abcxyz
//abcxyz
- compare operator
两个string类型可以直接使用==,!=,<,<=,>,>=比较大小,比较规则是字典序
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string str1="aa",str2="aaa",str3="abc",str4="xyz";
if(str1<str2) printf("ok1\n");
if(str2!=str1) printf("ok2\n");
if(str4>=str3) printf("ok3\n");
return 0;
}
//输出ok1
//ok2
//ok3
- length()/size()
length()返回string的长度,即存放的字符数,时间复杂度为O(1)
size()与length()基本相同
string str="abcxyz";
printf("%d %d\n",str.length(),str.size());
//输出6 6
- insert()
insert(pos,string),在pos号位置插入字符串string
string str="abcxyz",str2="opq";
str.insert(3,str2);
cout<<str<<endl;
//输出abcopqxyz
insert(it,it2,it3),it为原来的欲插入位置,it2和it3为待插入字符串的首尾迭代器,用来表示串[it2,it3)将被插在it的位置上
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string str="absxyz",str2="opq";
str.insert(str.begin()+3,str2.begin(),str.end());
//在str的3号位即c和x之间插入str2
cout<<str<<endl;
return 0;
}
**erase()**删除单个元素或者区间内元素,**clear()**清空数据这些作用与其他模板用法相同
- substr(),substr(pos,len)返回从pos位开始,长度为len的子串,时间复杂度为O(len)
-find(),当str2为str的子串时,str.find(str2)返回str中第一次出现的位置