【STL】string容器

文章详细介绍了C++中的string类,包括其作为字符容器的基本概念,各种构造函数的用法,如创建空字符串、从字符数组或另一个string初始化。还讨论了赋值操作、字符串拼接的方法,以及查找、替换、比较、存取字符、插入删除和提取子字符串等功能。
摘要由CSDN通过智能技术生成

1、string基本概念

本质:string是C++风格的字符串,而string 的本质是一个类
string和char区别:
char
是一个指针;
string是一个类,类内部封装了char*,管理这个字符串,是一个char型的容器。
特点:string类内部封装了很多成员方法。
string管理char
所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责。

1.1 string构造函数

构造函数原型:

  • string(); 创建一个空的字符串,
  • string(const char* s) 使用字符串s初始化
  • string(const string& str)使用一个String对象初始化另一个string对象
  • string(int n,char c)使用n个字符c初始化
string s;
string s1 = "hello";
cout << s1 << endl;   //hello
const char* str = "hello world";
string s2(str);
cout << s2 << endl;   //hello world
string s3(s2);
cout << s3 << endl;  //hello world
string s4(10, 'h');
cout << s4<<endl;  //hhhhhhhhhh
1.2 string赋值操作
string str1 = "hello world";
cout << str1 << endl;  //hello world
string str2 = str1;
cout << str2 << endl;  //hello world
string str3;
str3 = 'a';
cout << str3 << endl;  //a
string str4;
str4.assign("nihao");
cout << str4 << endl;  //nihao
string str5;
str5.assign("hello luelue", 5);
cout << str5<<endl;  //hello
string str6;
str6.assign(str5);
cout << str6<<endl;  //hello
string str7;
str7.assign(10, 'w');  //wwwwwwwwww
cout << str7 << endl;
1.3 string字符串拼接

作用:实现在字符串末尾拼接字符串

//方式一
string str1 = "hello";
str1 += " world";
cout << str1 << endl;  //hello world
str1 += "!";
cout << str1<<endl;  //hello world!
string str2 = "C++";
str1 += str2;
cout << str1 << endl;  //hello world!C++
//方式二
string str3 = "日暮";
str3.append("南山");
cout << str3 << endl;  //日暮南山
str3.append("鸟倦飞", 4);
cout << str3 << endl;  //日暮南山鸟倦
str3.append(str2,0,2); // pos1要拼接的字符串,pos2截取开始的位置,pos3要截取的长度
cout << str3 << endl; //日暮南山鸟倦C+,截取指定字符串
1.4 string查找和替换

查找:查找指定字符串是否存在
替换:在指定的位置替换字符串

//查找
string str1 = "hello world!";
int loc = str1.find("olr");//存在返回位置,不存在返回-1
cout << loc<<endl;   // -1
//rfind从右向左搜索,find从左至右
int pos = str1.rfind("l"); 
cout << pos << endl;  //9
//替换
//从0号位置起,5个字符被替换
str1.replace(0,5,"nihao");  
cout << str1 << endl;  //nihao world!
1.5 string字符串比较

字符串比较是按字符的ASCII码进行对比
= 返回0;> 返回1;< 返回-1

string str1 = "hello";
string str2 = "hello";
int a =str1.compare(str2);
int b = (str1 == str2);
cout << a << "\t" << b; //输出0 ,1
1.6 string字符存取
string str1 = "hello world";
//访问方式一,通过位置下标
for (int i = 0; i < str1.size(); i++) {
	str1[i] = 'a'+i;
	cout << str1[i];
}
//访问方式二,at()函数
for (int i = 0; i < str1.size(); i++) {
	cout << str1.at(i);
}
1.7 string插入和删除
string str = "hello";
str.insert(3, "222");
cout << str;  //hel222lo
str.erase(3, 3);
//str.replace(3, 3, "");
cout << str;  //hello
1.8 string字串

从字符串中获取想要的字串

string str = "hello";
string subStr = str.substr(1, 3);
cout << subStr;  //ell
string str1 = "hello@qq.com";
int loc = str1.rfind("@");
string str2 =  str1.substr(0, loc);
cout << str2; //hello
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值