1. string基本概念
本质:
string是C++风格的字符串,而string本质上是一个类
string和char *的区别:
char *是一个指针
string是一个类,类内部封装了char *,管理这个字符串,是一个char *型的容器
特点:
string内部封装了很多成员方法
例如:查找find,拷贝copy,删除delete,替换replace,插入insert
string管理char*所分配的内存,不要担心复制越界和取值越界等,由类内部进行负责
2.string构造函数
#include <algorithm> //标准算法头文件
#include <iostream>
#include <vector>
using namespace std;
// string的构造函数
void test02()
{
string s1; //默认构造
const char* str = "hello"; //加const的原因,因为"hello"是一个字符常量,常量保存在全局区,声明就也需要在全局
string s2(str);
cout << s2 << endl;
string s3(s2);
cout << s3 << endl;
string s4(10, 'a'); //输出10个a
cout << s4 << endl;
}
int main()
{
test02();
return 0;
}
总结:string的多种构造方式没有可比性,灵活使用即可。
3. string赋值操作
功能描述:
给string字符串进行赋值
#include <algorithm> //标准算法头文件
#include <iostream>
#include <vector>
using namespace std;
// string的赋值操作
void test02()
{
// 1. 利用 const char* 赋值
string s1;
s1 = "hello world";
// 2.字符串赋值
string s2;
s2 = s1;
// 3.字符赋值给字符串
string s3;
s3 = 'a';
// assign赋值
// 4.字符串赋值
string s4;
s4.assign("hello C++");
// 5.把字符串的前n个赋值给当前字符串
string s5;
s5.assign("hello C++", 5); //把前五个字符赋值
cout << "s5=" << s5 << endl;
// 6.把字符串s赋值给当前字符
string s6;
s6.assign(s5);
cout << "s6=" << s6 << endl;
// 7.用n个字符c赋值给当前字符串
string s7;
s7.assign(2, 'a');
cout << "s7=" << s7 << endl;
}
int main()
{
test02();
return 0;
}
总结:
string的赋值方式很多,operator=比较实用
4. string字符串拼接
功能描述:
实现在字符串末尾拼接字符串
#include <algorithm> //标准算法头文件
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// string的字符串拼接
void test01()
{
string s1 = "我";
s1 += "是";
cout << "s1=" << s1 << endl;
s1 += 'a';
cout << "s1=" << s1 << endl;
string s2 = "你好";
s2 += s1;
cout << "s2=" << s2 << endl;
string s3 = "I";
s3.append("love");
cout << "s3=" << s3 << endl;
s3.append("you test a test", 4); //去前4个
cout << "s3=" << s3 << endl;
s3.append(s2);
cout << "s3=" << s3 << endl;
s3.append(s2, 0, 4); //从s2的0位开始追加4位 ,一个汉字是2位字符
cout << "s3=" << s3 << endl;
}
int main()
{
test01();
return 0;
}
总结:字符串拼接的重载版本很多,初学只要记住几种就好
5. string查找和替换
功能描述:
查找:查找指定字符串是否存在
替换:在指定的位置替换字符串
#include <algorithm> //标准算法头文件
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 字符串的查找和替换
void test01()
{
// find 从左往右
string s1 = "abcdefgde";
int pos = s1.find("de", 0); //第二个是下标,默认从0开始, 返回值是找到的下标,-1是没找到
cout << pos << endl;
// rfind 从右边开始查找
pos = s1.rfind("de");
cout << pos << endl;
}
void test02()
{
string s1 = "abcdefg";
s1.replace(1, 3, "1111"); //从1到位置3个字符替换
cout << "s1=" << s1 << endl;
}
int main()
{
test02();
return 0;
}
6. string字符串比较
功能描述:
字符串之间的比较
比较方式:
字符串比较是按字符的ASCII码进行对比
= 返回0
> 返回1
< 返回-1
#include <algorithm> //标准算法头文件
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 字符串比较
void test02()
{
string s1 = "hello1";
string s2 = "hello";
if (s1.compare(s2) == 0) { //比较compare
cout << "相等" << endl;
} else if (s1.compare(s2) == 1) {
cout << "大于" << endl;
} else {
cout << "小于" << endl;
}
}
int main()
{
test02();
return 0;
}
7. sting字符串存取
#include <algorithm> //标准算法头文件
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 字符串存取
void test02()
{
string str1 = "hello C++";
cout << "str1 = " << str1 << endl;
//两种方法
// 1.通过【】
for (int i = 0; i < (int)str1.size(); i++) // str1.size()返回字符串长度
{
cout << str1[i] << " ";
}
cout << endl;
// 2.通过at ,at不可以越界,【】可以
for (int i = 0; i < (long long)str1.size(); i++) {
cout << str1.at(i) << " ";
}
cout << endl;
//修改单个字符
str1[0] = 'x';
cout << "str1 = " << str1 << endl;
// cout << str1.at(100) << endl; //崩溃
cout << str1[100] << endl; //返回空
}
int main()
{
test02();
return 0;
}
8. string插入和删除
#include <algorithm> //标准算法头文件
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 字符串插入 删除
void test02()
{
string str1 = "hello";
//插入
str1.insert(1, "222"); //在位置1插入字符串
cout << "str1 = " << str1 << endl;
//删除
str1.erase(1, 3); //从第1个位置起,删除3个
cout << "str1 = " << str1 << endl;
}
int main()
{
test02();
return 0;
}
总结:插入和删除的下标都是从0开始
9. sting字串
功能描述:
从字符串中获取想要的字符串
#include <algorithm> //标准算法头文件
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 字符串字串
void test02()
{
string str1 = "hello";
string sub = str1.substr(1, 2); //从1开始截取2个
cout << "sub=" << sub << endl;
//实用操作
string email = "zhangsan@qq.com";
int pos = email.find("@"); //找到返回下标 8
cout << pos << endl;
string username = email.substr(0, pos); //从0开始截取8个
cout << "username=" << username << endl;
}
int main()
{
test02();
return 0;
}
总结:灵活的运用求字串功能,可以在实际开发中获取有用的信息