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