#include<iostream>
#include<string>
using namespace std;
void test01(){
string s1; //调用无参构造
string s2(10,'a'); //调用有参构造
string s3("Hello"); //调用有参构造
string s4(s3); //调用拷贝构造
cout<<s1<<endl;
cout<<s2<<endl;
cout<<s3<<endl;
cout<<s4<<endl;
}
//赋值操作
void test02(){
string s1;
string s2("Hello");
s1 = "cat";
cout<<s1<<endl;
s1=s2;
cout<<s1<<endl;
s1='a';
cout<<s1<<endl;
s1.assign("jkl");
cout<<s1<<endl;
}
//取值操作
void test03(){
string s1 = "Helllooo";
//重载操作运算符 []
for(int i=0;i<s1.size();i++)
cout<<s1[i]<<" ";
cout<<endl;
//at成员方法
for(int i=0;i<s1.size();i++)
cout<<s1.at(i)<<" ";
cout<<endl;
//区别:
// []方式:当数组越界时会直接挂掉
// at方法:当数组越界时可以抛出异常
try{
cout<<s1.at(100)<<endl;
}
catch(...){
cout<<"数组越界"<<endl;
}
}
//拼接操作
void test04(){
string s1("abcd");
cout<<s1<<endl;
s1 += "efg";
cout<<s1<<endl;
string s2("asd");
string s3("fgh");
cout<<s2<<endl;
s2.append(s3); //将字符串添加到尾部
cout<<s2<<endl;
string s4 = s2+s3;
cout<<s4<<endl;
}
//查找操作
void test05(){
string s1 = "abcdefgde" ;
//find()是从首部开始查找,返回第一次出现的位置
int pos = s1.find("de");
cout<<pos<<endl;
//rfind()是从尾部开始查找
pos = s1.rfind("de");
cout<<pos<<endl;
}
//替换操作
void test06(){
string s1("abcdef");
s1.replace(0,2,"123"); //从第0个到第2个位置替换掉
cout<<s1<<endl;
}
//比较操作
void test07(){
string s1 = "abcd";
string s2 = "abce";
// 可以直接比较: if(s1==s2)
//或者二使用compare函数
if(s1.compare(s2)==0) // -1 小于 0 等于 1 大于
cout<<"s1与s2相等"<<endl;
else
cout<<"s1与s2不相等"<<endl;
}
//子串提取操作
void test08(){
string s1="abcdef";
cout<<s1.substr(1,3)<<endl; //返回从位置1到3的子串
}
//插入和删除操作
void test09(){
string s1 = "abcde";
s1.insert(3,"---"); //从第3个位置开始插入
cout<<s1<<endl;
s1.erase(0,1); //从第0开始到第1个位置之间全部删除 (不包括第1个位置)
cout<<s1<<endl;
}
int main(){
test01();
test02();
test03();
test04();
test05();
test06();
test07();
test08();
test09();
return 0;
}