2023年5月7日,周日中午:
今天决定从字符串这个知识点开始学起,记录一下我今天的字符串学习。
不定期更新。
相关的英文文档:
https://cplusplus.com/reference/string/string/
容量方面的成员函数:
empty:检测字符串是否为空。
#include<string>
#include<iostream>
using namespace std;
int main(){
string str1="helleo";
string str2="";
cout<<"str1是否为空"<<str1.empty()<<endl;
cout<<"str2是否为空"<<str2.empty()<<endl;
}
clear:清空字符串的内容。
#include<string>
#include<iostream>
using namespace std;
int main(){
string str1="helleo";
cout<<"str1清空前"<<str1<<endl;
str1.clear();
cout<<"str1清空后"<<str1<<endl;
}
size、length:返回字符串所含字符数。
#include<string>
#include<iostream>
using namespace std;
int main(){
string str="nihao";
cout<<"the size of str:"<<str.size()<<endl;
cout<<"the length of str:"<<str.length()<<endl;
}
capacity:返回字符串所申请的内存空间的大小。
注意:默认申请的是15个内存空间的大小
#include<string>
#include<iostream>
using namespace std;
int main(){
string str;
cout<<str.capacity()<<endl;
}
restore:改变字符串的内存空间大小
假设:restore(n)
如果n比当前的字符串的内存空间大小要大,那么restore会让字符串的内存空间变成n,或者变得比n更大
#include<string>
#include<iostream>
using namespace std;
int main(){
string str;
string str2;
cout<<"str的默认内存空间大小:"<<str.capacity()<<endl;
cout<<"str2的默认内存空间大小:"<<str2.capacity()<<endl;
str.reserve(20);
cout<<"str.reserve(20)后的内存空间大小:"<<str.capacity()<<endl;
str2.reserve(40);
cout<<"str2.reserve(40)后的内存空间大小:"<<str2.capacity()<<endl;
}
修改方面的成员函数:
push_back:在字符串的末尾增加一个字符
#include<string>
#include<iostream>
using namespace std;
int main(){
string str;
str.push_back('a');
str.push_back('b');
str.push_back('c');
cout<<str<<endl;
}
pop_back:删除字符串末尾的一个元素
#include<string>
#include<iostream>
using namespace std;
int main(){
string str;
str.push_back('a');
str.push_back('b');
str.push_back('c');
cout<<str<<endl;
str.pop_back();
cout<<str<<endl;
}
swap:换成指定的字符串
#include<string>
#include<iostream>
using namespace std;
int main(){
string str="apple";
string str2="idea";
str.swap(str2);
cout<<str<<endl;
}
元素获取方面的成员函数:
back:获取字符串的最后一个元素
#include<string>
#include<iostream>
using namespace std;
int main(){
string str="apple";
cout<<str.back()<<endl;
}
front:获取字符串的第一个元素
#include<string>
#include<iostream>
using namespace std;
int main(){
string str="apple";
cout<<str.front()<<endl;
}
字符串操作方面的成员函数:
find_first_of:在字符串中查找第一个匹配指定字符集中字符的字符,并返回其位置。
它有四种形式:
如果你设置了pos,那么只会从pos之后开始找
如果查找成功,那么会返回字符在字符串中的位置
如果查找失败,那么会返回string::npos
string::npos是string类中的一个静态成员常量,其值为-1
#include <iostream>
#include <string>
using namespace std;
int main(){
string str="12a34b567";
cout<<"字符串中首次出现字母a或b的位置是:"<<str.find_first_of("ab");
}
#include <iostream>
#include <string>
using namespace std;
int main(){
string str="12a34b5c6de7f";
cout<<str<<endl;
int index=str.find_first_of("123456789");
while(index!=string::npos){
str[index]='@';
index=str.find_first_of("123456789",index+1);
}
cout<<"把str中的数字都变成@:"<<str<<endl;
}
find_first_not_of:在字符串中查找第一个不匹配指定字符集中字符的字符,并返回其位置。
用这个可以判断用户输入的密码是否合规定,比如我规定密码只能含大小写字母和数字
#include <string>
#include <iostream>
using namespace std;
int main(){
string password="123abc@822742";
int index=password.find_first_not_of("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789");
if(index!=string::npos){
cout<<"密码不合规!"<<endl;
}
}
不是string的成员函数,但是是它们的重载的函数
std::swap:交换两个string的值
#include <string>
#include <iostream>
using namespace std;
int main(){
string xiaoming="apple";
string xiaojun="banana";
cout<<"交换前:"<<endl;
cout<<"小明:"<<xiaoming<<endl;
cout<<"小军:"<<xiaojun<<endl;
swap(xiaoming,xiaojun);
cout<<"交换后:"<<endl;
cout<<"小明:"<<xiaoming<<endl;
cout<<"小军:"<<xiaojun<<endl;
}
std::getline:从数据流中读取一行数据到string中
std::cin和std::getline有什么区别?
cin 和 getline() 主要的区别是,cin 以空格为分隔符,而 getline() 以换行符为分隔符。如果你需要获取包含空格的整行或段落文字,使用 getline() 更为合适。否则,使用 cin 可以更方便地直接将数据存入变量中。
#include <string>
#include <iostream>
using namespace std;
int main(){
string str1;
string str2;
string temp;
cin>>str1;
cout<<"str1:"<<str1<<endl;
getline(cin,temp);
getline(cin,str2);
cout<<"str2:"<<str2<<endl;
}