string
字符串类型,下标从0开始。
函数用法
定义
#include <iostream>
#include <string>string s;
初始化
string s="Hello,World!";sting a="Hello,";
string b="World!";
string s=a+b;string s("Hello,World!");
//上述三种s等价
输入
cin>>s;
//遇到空格或换行就截止
getline(cin,s);
//遇到换行才会截止
获取长度
int len=s.size();int len=s.length();
//上述代码等价
size()
,length
返回值:int
检查空串
if(s.empty()) printf("No");
else printf("Yes");
//空串输出No,非空串输出Yes
empty()
返回值:bool
,空串返回1,非空返回0
访问指定字符
cout<<s[i]; //访问下标为i的元素cout<<s.at(i); //访问下标为i的元素
//上述代码等价
operator[]
,at()
返回值:char
截取子串
string sub=s.substr(i1,i2); //截取下标从i1到i2的字符
substr()
返回值:string
,为截取到的字符串
查找字符
//查找子字符串在字符串中首次出现的位置
int id=s.find("sub"); //寻找sub在原字符串中首次出现的位置//查找子字符串在字符串中最后一次出现的位置
int id=s.rfind("sub"); //寻找sub在原字符串中最后一次出现的位置
find()
,rfind()
返回值:int
,返回该子串首位在原字符串中的下标,如果目标不存在则返回-1
替换字符
//全部替换
s.assign("sub"); //将整个原字符串替换为sub
s.assign(str,i,len); //将整个原字符串替换为str从i下标开始的len个字符
s.assign(x,'a'); //将整个原字符串替换为x个字符a(a必须是char类型)//区间修改
s.replace(i,len,"sub"); //将原字符串中从下标i开始的len位替换为sub//单点修改
s[i]='a'; //将原字符串i下标的元素替换为a(a必须是char类型)
插入字符
//在字符串末尾添加内容
s.append("sub"); //将sub添加到原字符串末尾s+=sub; //将sub添加到原字符串末尾
//上述代码等价
s.push_back('a'); //将字符a添加到原字符串末尾(a必须是char类型)//在指定位置插入内容
s.insert(i,"sub"); //将sub插入到原字符串下标为i的位置
删除字符
//删除指定字符
s.erase(i,len); //删除从下标i开始的len位字符//清空字符串
s.clear(); //清空整个字符串//从结尾删除
s.pop_back(); //删除字符串中最后一位字符
指针
const char* c=s.c_str();const char* c=s.data();
//上述代码等价
c_str()
,data()
返回值:const char*
,获得一个指向原字符串的指针
比较/匹配
//比较两个字符串
int res=s.compare("other"); //比较s和other
if(res==0) printf("Yes");
else printf("No");
//相同输出Yes,不相同输出No//查找第一个匹配任意字符的位置(只要给定字符串中任意一位匹配到了就会返回)
size_t id=s.find_first_of("abc");
//查找第一个出现的字母'a','b','c'中的任意一个字符的位置//查找最后一个匹配任意字符的位置(只要给定字符串中任意一位匹配到了就会返回)
size_t id=s.find_last_of("abc");
//查找最后一个出现的字母'a','b','c'中的任意一个字符的位置//查找第一个不匹配任意字符的位置(只要某个字符串不在给定字符内就会返回)
size_t id=s.find_first_not_of("abc");
//查找第一个不属于'a','b','c'中任意一个字符的位置//查找最后一个不匹配任意字符的位置(只要某个字符串不在给定字符内就会返回)
size_t id=s.find_last_not_of("abc");
//查找最后一个不属于'a','b','c'中任意一个字符的位置
compare()
返回值:int
,相同返回0,不相同返回-1
find_first_of()
,find_last_of()
,find_first_not_of()
,find_last_not_of()
返回值:size_t
,匹配到对应的会返回下标,没有匹配到会返回npos
反转
//反转整个字符串
reverse(s.begin(),s.end());//反转部分字符
reverse(s.begin()+i,s.begin()+j+1); //反转下标从i到j的部分
转换
//int转string
s=to_string(x); //将int类型的x转为string类型的s//string转int
x=stoi(s); //将string类型的s转为int类型的x//char[]转string (c是char[]类型)
s=c; //将char[]类型的c转为string类型的ss.assign(c); //将char[]类型的c转为string类型的s
//上述方法等效//string转char[] (c是char[]类型)
s.copy(c,len,i); //将string类型的s中从下标i开始的len位转换为char[]类型
copy()
返回值:size_t
,返回复制的字符数量
遍历
- 使用基于范围的for循环
for(char c:s){cout<<s<<" ";
}
直接遍历了原string的内容
- 使用下标访问
for(int i=0;i<s.length();i++){cout<<s[i]<<" ";
}
常用于修改字符,但是它涉及到字符串的拷贝,会有额外开销
- 使用迭代器
for(auto i=s.begin();i!=s.end();i++){cout<<*i<<" ";
}