C++进阶学习:STL常用容器--string容器

发布于:2025-05-09 ⋅ 阅读:(10) ⋅ 点赞:(0)

1. string 基本概念

string 是C++风格的字符串  本质上是一个类

string 和 char * 的区别:

char * 是一个指针

string 是一个类  类内部封装了 char *  管理这个字符串  是一个 char * 型的容器

特点:

string 类内封装了很多成员方法

例如:查找 find  拷贝 copy  删除 delete  替换 replace  插入 insert 

string 管理 char * 所分配的内存 不用担心赋值越界和取值越界等问题  由类内部进行负责 

2. string 构造函数

构造函数原型:

string();                   //创建一个空的字符串
string(const char* s);      //使用字符串s初始化
string(const string& str);  //使用一个string对象初始化另一个string对象
string(int n, int c);       //使用n个字符c初始化

代码示例:

#include <iostream>
using namespace std;
#include <string>
#include <algorithm>  //标准算法头文件

//string的构造函数

//测试函数
void test01()
{
	string s1;  //默认构造

	const char* str = "Hello World!";
	string s2(str);  //使用字符初始化
	cout << "s2 = " << s2 << endl;

	string s3(s2);  //使用一个string对象初始化另一个string对象
	cout << "s3 = " << s3 << endl;

	string s4(10, 'a');  //使用n个字符c初始化
	cout << "s4 = " << s4 << endl;    
}

int main()
{
	test01();
	system("pause");
	return 0;
}

3. string 赋值操作

代码示例

#include <iostream>
using namespace std;
#include <string>
#include <algorithm>  //标准算法头文件

//string的赋值操作

//测试函数
void test01()
{
	//通过 = 进行赋值
	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;

	string str5;
	str5.assign("Hello C++!", 5);
	cout << "str5 = " << str5 << endl;

	string str6;
	str6.assign(str4);;
	cout << "str6 = " << str6 << endl;

	string str7;
	str7.assign(7, 'w');
	cout << "str7 = " << str7 << endl;
}

int main()
{
	test01();
	system("pause");
	return 0;
}

4. string 字符串拼接

代码示例

#include <iostream>
using namespace std;
#include <string>
#include <algorithm>  //标准算法头文件

//string字符串拼接

//测试函数
void test01()
{
	// += 方式
	string str1 = "我";
	str1 += "爱玩游戏";
	cout << "str1 = " << str1 << endl;

	str1 += ': ';
	cout << "str1 = " << str1 << endl;

	string str2 = "LOL DNF";
	str1 += str2;
	cout << "str1 = " << str1 << endl;

	// append 方式
	string str3 = "I";
	str3.append(" love ");
	cout << "str3 = " << str3 << endl;

	str3.append("game abcde", 4);
	cout << "str3 = " << str3 << endl;

	//str3.append(str2, 1, 3);  //I love game LOL
	str3.append(str2, 4, 3);  //I love game DNF 
	cout << "str3 = " << str3 << endl;
}

int main()
{
	test01();
	system("pause");
	return 0;
}

5. string 查找和替换

功能描述:

查找:查找指定字符串是否存在

替换:在指定的位置替换字符串

代码示例

#include <iostream>
using namespace std;
#include <string>
#include <algorithm>  //标准算法头文件

//string字符串查找和替换

//1、查找
//测试函数
void test01()
{
	string str1 = "abcdefgde";

	//find  从左往右
	int pos = str1.find("de");
	if (pos == -1)
	{
		cout << "未找到字符串" << endl;

	}
	else
	{
		cout << "找到字符串 pos = " << pos << endl;  //3
	}

	//rfind  从右往左
	pos = str1.rfind("de");
	if (pos == -1)
	{
		cout << "未找到字符串" << endl;

	}
	else
	{
		cout << "找到字符串 pos = " << pos << endl;  //7
	}
}

//2、替换
void test02()
{
	string str1 = "abcdefg";

	//replace
	str1.replace(1, 3, "1111");
	cout << "str1 = " << str1 << endl;  //a1111efg

}

int main()
{
	//test01();
	test02();
	system("pause");
	return 0;
}

6. string 字符串比较

功能描述:

字符串之间的比较

比较方式:

按照字符的Ascll码值比较

= 返回 0

> 返回1

< 返回-1

代码示例
 

#include <iostream>
using namespace std;
#include <string>
#include <algorithm>  //标准算法头文件

//string字符串比较

//测试函数
void test01()
{
	string str1 = "hello";
	string str2 = "xello";

	if (str1.compare(str2) == 0)
	{
		cout << "str1 = str2" << endl;
	}
	else if (str1.compare(str2) > 0)
	{
		cout << "str1 > str2" << endl;
	}
	else if (str1.compare(str2) < 0)
	{
		cout << "str1 < str2" << endl;
	}
}

int main()
{
	test01();
	system("pause");
	return 0;
}

7. string 字符存取

string 中单个字符的存取方式有两种

char& operator[](int n);  //通过[]方式取字符
char& at(int n);          //通过at方式取字符

代码示例

#include <iostream>
using namespace std;
#include <string>
#include <algorithm>  //标准算法头文件

//string字符存取操作

//测试函数
void test01()
{
	string str1 = "hello";
	cout << "str1 = " << str1 << endl;

	//1、通过[]访问单个字符
	for (int i = 0;i < str1.size();i++)
	{
		cout << str1[i]<<" ";
	}
	cout << endl;

	//2、通过at访问单个字符
	for (int i = 0;i < str1.size();i++)
	{
		cout << str1.at(i) << " ";
	}
	cout << endl;

	str1[0] = 'x';
	cout << "str1 = " << str1 << endl;
	str1.at(1) = 'x';
	cout << "str1 = " << str1 << endl;
}

int main()
{
	test01();
	system("pause");
	return 0;
}

8. string 中的插入和删除

功能描述:

对 string 字符串进行插入和删除字符操作

代码示例

#include <iostream>
using namespace std;
#include <string>
#include <algorithm>  //标准算法头文件

//string 字符串插入和删除

//测试函数
void test01()
{
	string str1 = "hello";

	//插入
	str1.insert(1, "111");  //h111ello
	cout << "str1 = " << str1 << endl;
	
	//删除
	str1.erase(1,3);  //hello
	cout << "str1 = " << str1 << endl;
}

int main()
{
	test01();
	system("pause");
	return 0;
}

9. string 子串

功能描述:

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

代码示例

#include <iostream>
using namespace std;
#include <string>
#include <algorithm>  //标准算法头文件

//string 子串

//测试函数
void test01()
{
	string str1 = "abcdef";
	string subStr = str1.substr(1, 3);
	cout << "subStr = " << subStr << endl;  //bcd
}

//实用操作
void test02()
{
	string email = "zhangsan@163.com";

	//从邮箱地址中找到用户信息
	int pos = email.find('@');
	string userName = email.substr(0, pos);
	cout << "userName = " << userName << endl;  //zhangsan
}

int main()
{
	test01();
	test02();
	system("pause");
	return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到