【C++】String容器
-
string 和 char*的区别
-
char * 是一个指针
-
string 是一个类,其内部封装好了
char*
,是一个
char*
型的容器
-
-
特点
-
string 类内部封装了很多方法
例如:查找find、拷贝copy、删除delete、替换replace、插入insert
-
string 管理char*所分配的内存,不用担心复制越界和取值越界等问题
-
-
string 容器的构造方法
-
默认构造
string s1;
-
用字符串s初始化
const char * s = "hello world!"; string s2(s); cout<<"s2 = "<<s2<<endl;
-
通过复制一个string对象来初始化
string s3(s2); cout<<"s3 = "<<s3<<endl;
-
用 n 个指定字符来初始化
string s4(10,'a'); cout<<"s4 = "<<s4<<endl;
-
-
string 容器的赋值方法
-
= 方法
string str1; str1 = "hello world!"; cout<<"str1 = "<<str1<<endl; string str2; str2 = str1; cout<<"str2 = "<<str2<<endl; string str3; str3 = 'a'; cout<<"str3 = "<<str3<<endl;
-
assign()函数方法
string str4; str4.assign("hello c++"); cout<<"str4 = "<<str4<<endl; //取字符串 str 的前 n 个字符 string str5; str5.assign("hello c++",7); cout<<"str5 = "<<str5<<endl; string str6; str6.assign(str5); cout<<"str6 = "<<str6<<endl; string str7; str7.assign(5,'x'); cout<<"str7 = "<<str7<<endl;
-
-
string 容器的字符串拼接
-
+= 方法
//string 容器的字符串拼接 // += 方法 string str1 = "hello"; str1 += " world";//可以直接加一个字符串 cout<<"str1 = "<<str1<<endl; str1 += '!';//可以直接加一个字符 cout<<"str1 = "<<str1<<endl; string str2 = "233"; str1 += str2; cout<<"str1 = "<<str1<<endl;
-
appen()函数方法
//append()函数方法 string str3 = "hello"; str3.append(" world"); cout<<"str3 = "<<str3<<endl; str3.append("123456",3);//只拼接前3个字符串 cout<<"str3 = "<<str3<<endl; string str4 = "str4"; str4.append(str2); cout<<"str4 = "<<str4<<endl; //截取str3的字符,范围是从下标为0(位序为1)的字符开始截取5个字符 str4.append(str3,0,5); cout<<"str4 = "<<str4<<endl; //也可以直接将字符本身放进函数中 str4.append("hello world",0,5); cout<<"str4 = "<<str4<<endl;
-
-
string 容器的字符串查找
-
find()函数:
-
只有一个参数,那就是待查找的目标字符串
-
返回值是 目标字符串 第一次出现的
下标位置
-
-
rfind()函数
-
参数与find()函数相同
-
与find()函数的区别:
-
find()函数是在原字符串中
从左到右
依次查找 -
rfind()函数实在原字符串在
从右到左
依次查找
-
-
-
代码示例:
void test04() { //string 容器的字符串的查找 string str1 = "abcdefgdede"; int pos1 = str1.find("de"); if(pos1 == -1) { //若未找到目标字符串,则返回 -1 cout<<"未找到字符串"<<endl; } else { //pos返回的是从左往右找的过程中第一次遇到 目标字符串的 第一个字符的下标位置(不是位序) cout<<"找到字符串,pos1 = "<<pos1<<endl; } int pos2 = str1.rfind("de"); if(pos2 == -1) { cout<<"未找到字符串"<<endl; } else { //rfind()函数于find()函数几乎相同,只是rfind()函数是从右往左搜索,而find()函数是从左往右搜索 cout<<"找到字符串,pos2 = "<<pos2<<endl; } }
-
-
string 容器的字符串替换
-
replace()函数
-
共有三个参数
-
第一个参数:开始位置的下标
-
第二个参数:替换掉原字符串的长度
-
第三个参数:用来替换的字符串
-
-
-
代码示例:
void test05() { //string 容器的字符串的替换 string str1 = "abcdefgdedee"; //replace()函数 //第一个参数是从该 下标 开始 //第二个参数是替换原字符串的多少个字符 //第三个参数是 拿什么字符串替换 str1.replace(1,3,"111111111"); cout<<"str1 = "<<str1<<endl; }
-
-
string 容器的字符串比较
-
compare()函数
-
只有一个参数,那就是待比较的字符串
-
其结果有三种情况
-
=
返回 0 -
>
返回 1 (即原字符串大于待比较的字符串) -
<
返回 -1
-
-
-
代码示例:
void test06() { //string 容器的字符串比较 //比较方式 按字符的 ASCII码值比较 // = 返回 0 // > 返回 1 // < 返回 -1 string str1 = "Hello"; string str2 = "hello"; int ret = str1.compare(str2); if(ret == 0) { //通常使用字符串比较只用比较其是否相等即可,至于谁大谁小意义不大 cout<<"str1 == str2"<<endl; } else { cout<<"str1 != str2"<<endl; } }
-
-
string 容器的字符串存取
-
用 [ ] 方法
-
直接获取指定位置的字符
-
-
用 at() 函数
-
只有一个参数,那就是待获取的位置
-
-
代码示例
void test07() { //string 容器的字符(串)存取 string str1 = "algorithm"; //用 [] 方法 for(int i=0;i<str1.size();i++) { cout<<str1[i]<< " "; } cout<<endl; //用 at() 函数方法 for(int i=0;i<str1.size();i++) { cout<<str1.at(i)<<" "; } cout<<endl; //xlgorithm str1.at(0) = 'x'; cout<<str1<<endl; //xxgorithm str1[1] = 'x'; cout<<str1<<endl; }
-
-
string 容器的字符串的插入和删除
-
插入
-
insert()函数
-
有两个参数
-
第一个参数:原字符串待插入的下标位置
-
第二个参数:插入的字符串
-
-
-
-
删除
-
erase()函数
-
两个参数
-
第一个参数:原字符串待删除的下标位置
-
第二个参数:删除的字符个数
-
-
-
-
代码示例:
void test08() { //string 容器的元素的插入和删除 string str1 = "algorithm"; str1.insert(1,"1111"); //在下标 1 后插入指定字符串 cout<<"插入后,str1 = "<<str1<<endl; str1.erase(1,4); //在下标 1 后删除 4 个字符 cout<<"删除后,str1 = "<<str1<<endl; //******************************* //插入和删除的起始下标都是从 0 开始 //******************************* }
-
-
string 容器的字符串取子串
-
substr()函数
-
两个参数
-
第一个参数:原字符串中 取子串的起始位置的下标
-
第二个参数:截取子串的长度
-
-
-
代码示例:
void test09() { //string 容器截取字串substring string str1 = "algorithm"; //第一个参数是起始位置的下标 //第二个参数是截取 子串的长度 string substr1 = str1.substr(0,6); cout<<"substr1 = "<<substr1<<endl; //截取后对原字符串无影响 cout<<"str1 = "<<str1<<endl; //实际应用示例 string email = "string@sina.com"; int pos = email.find("@"); string userName = email.substr(0,pos); cout<<"userName:"<<userName<<endl; }
-