本质:string是C++风格的字符串,而string本质是一个类
string和char区别:
1.char是一个指针
2.string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。
特点:
string类内部封装了很多成员方法,例如:查找find,拷贝copy,删除delete, 替换replace, 插入insert
string管理char*所分配的内存,不用担心复制越界,和取值越界等,由类内部进行负责。
1.string构造函数
构造函数原型:
string(); // 创建一个空的字符串,例如:string str;
string(const char* s); //使用字符串s初始化
string(const string& str) // 使用一个string对象初始化另一个string对象
string(int n, char c) //使用n个字符c初始化
//string构造函数
void test01() {
string s1; //默认构造
const char* str = "hello world";
string s2(str);
cout << "s2=" << s2 << endl;
string s3(s2);
cout << "s3=" << endl;
string s4(10, 'a');
}
2.给string字符串进行赋值
//赋值操作
void test02() {
//1.
string str1;
str1 = "aaa";
//2
string str2;
str2 = str1;
//3.
string str3;
str3 = 'q';
//4.
string str4;
str4.assign("aaaa");
//5.
string str5;
str5.assign("aaaaaaaa", 5);//把前5个输出
//6.
string str6;
str6.assign(str5);
string str7;
str7.assign(10, 'a');
}
3.string字符串拼接
重载+=操作符
append函数
//string字符串拼接
void test03() {
//1. +=操作符
string str1="我";
str1 += "爱玩游戏";
//2.
str1 += ':';
//3.
string str2 = "LOL";
str1 += str2;
//append方式
string str3 = "I";
str3.append("love");
str3.append("game", 3);
str3.append(str2);
str3.append(str2, 4, 3);//截取str2中的从第4个位置开始,截取三个,
}
4.查找和替换
查找: find :查找第一次出现位置 rfind:查找最后一次位置 返回值为int类型
//rfind从右往左查找,find从左往右查找
替换:replace
//查找和替换
void test04() {
string str1 = "abcdefg";
int pos = str1.find("de");//位置从零开始
if (pos = -1) {
cout << "未找到字符串" << endl;
}
else
{
cout << "扎到字符串" << pos << endl;
}
//rfind从右往左查找,find从左往右查找
str1.rfind("de");
//替换
str1.replace(1, 3, "1111");//从位置1开始到位置3替换为1111
}
5.字符串比较
按照字符的ASCII码进行对比
=返回0
返回1
<返回-1
函数:compare
//字符串比较
void test05() {
string str1 = "hello";
string str2 = "hello";
if (str1.compare(str2)==0) {
cout << "str1等于str2" << endl;
}
else if (str1.compare(str2) > 0) {
cout << "str1大于str2" << endl;
}
else {
cout << "str1小于str2" << endl;
}
}
6.字符存取
1.通过[]方式取字符
2.通过at方式
//字符串存取
void test06() {
string str1 = "hello";
//1.[]
for (int i = 0; i < str1.size(); i++) {
cout << str1[i]<< endl;
}
//2.at方式
for (int i = 0; i < str1.size(); i++) {
cout << str1.at(i) << endl;
}
//修改单个字符
str1[0] = 'x';//1
str1.at(1) = 'x';//2
}
7.插入和删除
insert插入字符串
erase删除字符串
//插入和删除、
void test07() {
string str = "hello";
//插入
str.insert(1, "111");//在1位置插3个1
//删除
str.erase(1, 3);//从第一个位置删除3个
}
8.从字符串中获取想要的子串
函数:substr
//求子串
void test08() {
string str = "abcdef";
string substr = str.substr(1.3);//从第一个位置返回3个
}