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 容器的字符串拼接 void test03()
{
? ?//string 容器的字符串拼接
? ?// += 方法
? ?string str1 = "hello";
? ?str1 += " world";//可以直接加一个字符串
? ?cout<<"str1 = "<<str1<<endl;
?
? ?str1 += '!';//可以直接加一个字符
? ?cout<<"str1 = "<<str1<<endl;
?
? ?string str2 = "233";
? ?str1 += str2;
? ?cout<<"str1 = "<<str1<<endl;
//*************************************************************
? ?//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;
? ?str4.append(str3,0,5);//截取str3的字符,范围是从下标为0(位序为1)的字符开始截取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;
}
|