C++ STL String 以及字符串处理相关知识点总结

本文详细介绍了C++中字符串的初始化、读写、相关操作、访问方式以及字符和字符串处理。包括拷贝初始化、getline读取、append、push_back、insert、erase、clear、empty、size、find、replace、substr等函数的用法,并展示了如何进行字符检查和转换。此外,还涵盖了下标访问、迭代器访问和范围for循环访问字符串的方法。
摘要由CSDN通过智能技术生成

1.初始化:

string s;//此时s是一个空串
string s("haha");//直接初始化
string s = "haha";//拷贝初始化,效果和直接相同,但字符过多时拷贝浪费时间
string s(10,'a');//s中有10个a

2.读写和输入:

输入和读写只能用 cin 和 cout
cin>>s;//输入s;
cout<<s;//输出s;
使用 scanf 和 printf 会报错,除非将其转化成字符数组
printf("%s,s.c_str());//必须在使用时转化,提前转化不管用,之后还是string型
cin遇到空白字符会结束读取,例如下面的例子
输入 school college student
最后 s == "school";
可以使用geiline输入一整行:
getline(cin,s);
s == "school college student";

3.相关操作:

1. append();//在字符串末尾添加字符串
s="haha";
s.append("xid");//s.append('a');会报错
s=="hahaxid";

2. push_back();//在末尾添加一个字符
s="haha";
s.push_back('a');//s.push_back("a");会报错
s=="hahaa";

3. insert();//在任意位置插入一个字符
s="haha";
s.insert(s.begin(),'x');//同样s.insert(s.begin(),"x");会报错
s=="xhaha";

4. erase();//删除字符或子串
s="haha";
s.erase(s.begin());
s=="aha";//删除s[0];
s.erase(s.begin(),s.begin()+2);//删除[0,2)区间的字符
s=="ha";//删除s[0],s[1]

5. clear();//清空字符串
s="haha";
s.clear();
s=="";

6. empty();//判断是否为空,非空为true,空为false
s="haha";
s.empty()==true;
s="";
s.empty()==false;

7. size();//返回字符串字符的数量
s="haha";
s.size()==4;

8. find();//在字符串中查找字符串或字符返回第一次找到他们的位置
s="haha";
int position = s.find('a',0);//从s[0],位置开始找,position==1
s.find('a',1)==1;
s.find('a')==1;
s.find('a',2)==3;
s.find('e',0)==-1;//找不到返回-1
s.find("haha",0)==0;
s.find("haha")==0;
s.find("haha",1)==-1;
s.find("ha",1)==2;
如果没有找到可以用s.find()!=-1 或s.find()!=string::npos 来判断,效果是一样的

9. length();//返回字符串长度和size用法一样
 s="haha";
 s.length()==4;
 
10. replace();//替换字符串
s="012345";
s.replace(s.begin(),s.begin()+2,"888");//替换区间[0,1)
s=="8882345";

11. substr();//返回某个子字符串
s="012345";
s.substr(0,2)=="01"//[0,2)全是左闭右开

3.访问:

1. 下标访问
s="haah"
for(int i=0;i<s.size();i++){
	cout<<s[i];
}

2.迭代器访问
s="haha";
string :: iterator it;
for(it=s.begin();it!=s.end();it++){
	cout<<*it;
}

3. for(range for)语句访问 c++11标准有些编译器无法使用只做了解
s="haha";
for (auto c: s){
	cout<<c;
}

4.字符处理:

#include<cctype>
char c;
isalnum(c);//字母或数字时为真
isalpha(c);//字母时为真
isdigit(c);//数字时为真
islower(c);//小写字母时为真
isupper(c);//大写字母时为真
tolower(c);//将大写字母转换成小写字母
toupper(c);//将小写字母转换成大写字母
isxdigit(c);//是十六进制数字时为真
ispunct(c);//是标点符号时为真

5.字符串处理

s="aaaaa";
transform(s.begin(),s.end(),s.begin(),toupper);//全部转换成大写
s=="AAAAA";
transform(s.begin(),s.end(),s.begin(),tolower);//全部转换成小写
s+s=="aaaaaaaaaa";
>=,>,<=,< 利用字符在字典中的顺序进行比较
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CheungRain

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

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

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

打赏作者

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

抵扣说明:

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

余额充值