概述
使用string之前,使用字符数组存储字符串,使用上比较受限制,
C++提供新的string类型,代替c语言中的字符数组。相对于字符数组,string类型更加灵活方便。
定义
string s1;//s1是一个空串
输入输出
int main(){
string s1;
cin>>s1;//输入s1
cout<<s1<<endl;//输出s1
return 0;
}
*读取并忽略开头的所有空白字符
*读取字符直到再次遇到空白字符,读取停止。(不含空格)
int main(){
string s1,s2;
cin>>s1>>s2;//输入s1
cout<<s1<<s2<<endl;//输出s1
return 0;
}
//读入未知数目的string对象
int main(){
string s;
while(cin>>s){//输入操作符会返回读的数据流,可以作为判断条件
cout<<s<<endl;
}
return 0;
}
//读入带空格的字符串getline()函数
int main(){
string s;
getline(cin,s);
cout<<s<<endl;
return 0;
}
转 char 数组
c_str()
printf("%s", s.c_str());
基本操作
//判断字符串是否为空
s.empty();
//返回字符个数
s.size() 或者 s.length()
//使用下标访问或修改某个位置的元素,下标从0开始
s[0],s[s.size()-1]
寻找某字符(串)第一次出现的位置
find(str,pos) 函数可以用来查找字符串中一个字符/字符串在 pos(含)之后第一次出现的位置(若不传参给 pos 则默认为 0)。如果没有出现,则返回 string::npos
若判断查找的值不存在
s.find("st") == s.npos
截取子串
substr(pos, len) 函数的参数返回从 pos 位置开始截取最多 len 个字符组成的字符串(如果从 pos 开始的后缀长度不足 len 则截取这个后缀)。
插入/删除字符(串)
insert(index,count,ch) 和 insert(index,str) 是比较常见的插入函数。它们分别表示在 index 处连续插入 count 次字符串 ch 和插入字符串 str。
erase(index,count) 函数将字符串 index 位置开始(含)的 count 个字符删除(若不传参给 count 则表示删去 count 位置及以后的所有字符)。
替换字符(串)
replace(pos,count,str) 和 replace(first,last,str) 是比较常见的替换函数。它们分别表示将从 pos 位置开始 count 个字符的子串替换为 str 以及将以 first 开始(含)、last 结束(不含)的子串替换为 str,其中 first 和 last 均为迭代器。
数值转换
stoi
(C11)转换字符串为有符号整数(函数)
stof
(C11)转换字符串为浮点值(函数)
NOIP的同学需要注意:
需要用atoi(s.c_str()) 替换stoi
//string 关系运算符
int main(){
string s1,s2;
cin>>s1>>s2;
//按照字典序比较大小。
//两个长度不同,短的字符与长的相同,则短的小
//两个字符串字符不相同,按第一个不相同的字符比较
cout<<s1==s2<<endl;
cout<<s1!=s2<<endl;
cout<
cout<<s1<=s2<<endl;
cout<
cout<<s1<s2<<endl;
return 0;
}
//+ 或 += 将两个字符串连接在一起
string s3=s1+s2;
s1+=s2;
字符处理函数
//对字符串中的单个字符进行判断,例如是否为数字,字母等
//所属头文件<cctype>
isalpha(c)//是否是字母
isalnum(c)//是否是数字或字母
isdigit(c)//是否是数字
islower(c)//是否是小写字母
isupper(c)//是否是大写字母
计算字符串长度 s.size()
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define N 10001
using namespace std;
string s1,s2,x;
int main(){
s1="abcdedfg";
x="dfff";
if(s1.find(x)!=-1){
cout<<"找到子串!"<<endl;
}else{
cout<<"未找到子串"<<endl;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
//查找子串的数量,并全部删除。
string s1="abcccdefcccgcccc",s2;
int cnt=0;
int main(){
s2="ccc";
while(1){
if(s1.find(s2)!=-1){
s1.erase(s1.find(s2),s2.size());
cnt++;
}else{
break;
}
}
cout<<cnt<<endl;
cout<<s1<<endl;
return 0;
}
评论区