STL_String容器

一、String的基本概念

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

string与char*的区别:

    1、cahr*是一个指针

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

特点:

    1、string内部封装了很多的方法。例如查找find、拷贝copy、删除delete、替换replace、插入insert等等

    2、string管理char*所分配的内存,不用担心复制越界或取值越界等,有类内部自行负责。

二、string的构造函数

学习目标:灵活使用string的几种构造函数

构造函数的原型:

      string();                                    //创建一个空的字符串。例如string str;

      string(const char* s);              //使用字符串s初始化

      string(const string& str);         //使用一个string对象初始化另一个string对象

      string(int n, char c);                //使用n个字符c初始化

 示例:

#include "iostream"
#include <string>

using namespace std;

void test11()
{
	string s1;    //默认函数 属于一个空的字符串

	const char * str = "Hello world!";
	string s2(str);     //使用str字符串初始化s2

	cout << "s2=" << s2 << endl;

	//拷贝构造
	string s3(s2);
	cout << "s3=" << s3 << endl;

	//用n个字符串c初始化
	string s4(10, 'a');
	cout << "s4=" << s4 << endl;
}
int main()
{
	test11();
	system("pause");
	return 0;
}

三、string的赋值操作

学习目标:能灵活的对string字符串进行赋值操作

赋值操作的函数原型:

      string& operator+(const char* s);                        //char*类型的字符串赋值给当前的字符串

      string& operator=(const string &s);                    //把字符串s赋值给当前的字符串

      string& operator=(char *s);                                //把字符赋值给当前的字符串

      string& assign(const char *s);                           //把字符串s赋值给当前的字符串

      string& assign(const cahr *s,int n)                    //把字符串s的前n个字符赋值给当前的字符串

      string& assign(const string &s);                        //把字符串s赋值给当前的字符串

      string& assign(int n,char c);                              //把n个字符串c赋值给当前字符串

示例: 

#include "iostream"
#include <string>


using namespace std;
void test12()
{
	string str1;
	//1、string& operator+(const char* s);char*类型的字符串赋值给当前的字符串
	str1 = "Hello World";             //"Hello World" 是char* s
	cout << "str1=" << str1 << endl;

	//2、string& operator=(const string &s); 把字符串s赋值给当前的字符串
	string str2;
	str2 = str1;
	cout << "str2=" << str2 << endl;

	//3、string& operator=(char *s);把字符赋值给当前的字符串
	string str3;
	str3 = 'a';
	cout << "str3=" << str3 << endl;

	//4、string& assign(const char *s);把字符串s赋值给当前的字符串
	string str4;
	str4.assign("Hello C++");
	cout << "str4=" << str4 << endl;

	//5、string& assign(const cahr *s,int n)把字符串s的前n个字符赋值给当前的字符串
	string str5;
	str5.assign("Hello C++", 5);
	cout << "str5=" << str5 << endl;

	//6、string& assign(const string &s);把字符串s赋值给当前的字符串
	string str6;
	str6.assign(str5);
	cout << "str6=" << str6 << endl;

	//7、string& assign(int n,char c);把n个字符串c赋值给当前字符串
	string str7;
	str7.assign(14, 'a');
	cout << "str7=" << str7 << endl;
}
int main()
{
	test12();
	system("pause");
	return 0;
}

四、string字符串拼接

学习目标:学会在一个字符串的末尾拼接另一个字符串

函数原型:

      string& operator+=(const char* str);                                   //重载+=操作符

      string& operator+=(const char c);

      string& operator+=(const string &s);                                 //

      string& append(const char *s);                                         //把字符串s连接到当前字符串的结尾

      string& append(const char *s,int n);                                //把字符串s的前n个连接到当前字符串的结尾

      string& append(const string &s);                                    //同  string& operator+=(const string &s);

      string& append(const string &s,int pos,int n)                 //把字符串s从pos开始的n个字符串连接到当前字符串的结尾

示例: 

#include "iostream"
#include <string>


using namespace std;
void test13()
{
	//1、string& operator+=(const char* str)
	string str1 = "我";
	str1 += "爱玩游戏";
	cout << "str1=" << str1 << endl;

	//2、 string& operator+=(const char c); 追加一个字符
	str1 += '!';
	cout << "str1=" << str1 << endl;

	//3、string& operator+=(const string &s); 追加一个字符串
	string str2 = "喜欢天天玩游戏";
	str1 += str2;
	cout << "str1=" << str1 << endl;

	//4、string& append(const char *s)
	string str3 = "我";
	str3.append("爱 ni");
	cout << "str3=" << str3 << endl;

	//5、string& append(const char *s,int n); 
	str3.append(",游戏! 哈哈哈", 5);
	cout << "str3=" << str3 << endl;

	//6、string& append(const string &s);   
	string str4 = "天天   玩不腻";
	str3.append(str4);
	cout << "str3=" << str3 << endl;

	//7、string& append(const string &s,int pos,int n) 
	str3.append(str4,2,3);
	cout << "str3=" << str3 << endl;
}
int main()
{
	test13();
	system("pause");
	return 0;
}

五、string字符串的查找与替换

学习目标:学会string字符串的查找与替换

函数原型:

      int find(const string& str,int pos=0) const;                //查找str第一次出现的位置,从pos开始查找

      int find(const char* s,int pos=0) const;                    //查找s第一次出现的位置,从pos开始查找

      int find(const char *s,int pos,int n);const;                //从pos位置查找s的前n个字符第一次出现的位置

      int find(const char c,int pos=0);                               //查找c第一次出现的位置

      int rfind(const string &str,int pos=nPos) const;        //查找str最后一次出现的位置,从pos开始查找

      int rfind(const char* s,int pos=nPos) const;             //查找s最后一次出现的位置,从pos开始查找

      int rfind(const char* s,int pos,int n) const;               //查找s的前n个字符最后一次出现的位置

      int rfind(const char c,int pos=0) const;                     //查找c最后一次出现的位置,从pos开始查找

      string& replace(int pos,int n,const string& str);          //替换从pos开始n个字符替换为字符串str;

      string& replace(int pos,int n,const char *s);               //替换从pos开始n个字符替换为字符串s;

示例:

#include "iostream"
#include <string>

using namespace std;
void test14()
{
	string str1 = "asadasdasdasdas";
	string str2 = "da";
	//1、int find(const string& str,int pos=0) const; //查找str第一次出现的位置,从pos开始查找   
	int pos=str1.find(str2,0);
	cout << "pos=" << pos << endl;          //有,返回pos。没有,则返回-1

	//2、int find(const char* s,int pos=0) const; //查找s第一次出现的位置,从pos开始查找
	int pos1 = str1.find("da",0);
	cout << "pos1=" << pos1 << endl;

	//3、int find(const char *s,int pos,int n);const; 从pos位置查找s的前n个字符第一次出现的位置
	int pos2 = str1.find("asda",1,2);
	cout << "pos2=" << pos2 << endl;

	//int rfind(const string &str,int pos=nPos) const;查找str最后一次出现的位置,从pos开始查找
	int pos4 = str1.rfind("da", 13);
	cout << "pos4=" << pos4 << endl;  


	//替换
	//1、string& replace(int pos, int n, const string& str);替换从pos开始n个字符为字符串str;
	str1.replace(0, 10, "th");
	cout << "str1=" << str1 << endl;
	//2、string& replace(int pos,int n,const char *s);替换从pos开始n个字符为字符串s;
	str1.replace(2,1, "ss3");
	cout << "str1=" << str1 << endl;

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

 总结:1、find与rfind的区别:find从左往右找,rfind从右往左找

            2、find找到字符串后返回查找的第一个字符位置,找不到返回-1

            3、replace在替换时,必须指定从哪一个位置开始,多少个字节替换成什么样的字符串

六、string字符串比较

学习目标:学会字符串的比较

比较方式:字符串比较是按照字符的ASCLL码进行对比。=返回0,>返回1,<返回-1

函数原型:

      int compare(const string &s) const;                   //与字符串s比较

      int compare(const char* s) const;                      //与字符串s比较

示例: 

#include "iostream"
#include <string>

using namespace std;

void test15()
{
	string str1 = "Lan";
	string str2 = "Lan";
	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()
{
	test15();
	system("pause");
	return 0;
}

七、string字符串的存取

学习目标:灵活掌握字符串的存取

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

      char* operator[](int n);                   //通过[]来取字符

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

 示例:

#include "iostream"
#include <string>

using namespace std;
void test16()
{
	string str = "21323213";

	//1\通过[]方式访问字符串中的数据
	for (int i = 0; i < str.size(); i++)
	{
		cout << str[i] << endl;
	}

	//2、通过at方式访问
	cout << "通过at方式访问" << endl;
	for (int i = 0; i < str.size(); i++)
	{
		cout << str.at(i) << endl;
	}
	//3、改
	str[0] = 'w';
	str.at(2) = 'e';
	for (int i = 0; i < str.size(); i++)
	{
		cout << str[i] << endl;
	}
}
int main()
{
	test16();
	system("pause");
	return 0;
}

八、string的插入与删除

学习目标:能够灵活对string字符串进行插入与删除操作

函数原型:

      string& insert(int pos,const char* s);

      string& insert(int pos,const string& str);                //插入字符串

      string& insert(int pos,int n,char c);                       //在指定的位置插入n个字符c

      string& erase(int pos,int n=npos);                       //从pos开始删除n个字符

 九、string子串

学习目标:能够从字符串中提取想要的子串

函数原型:

      string& substr(int pos,int n=npos) const;          //返回从pos开始的n个字符组成的字符串

示例:

#include "iostream"
#include <string>


using namespace std;
void test18()
{
	string str = "Hello world";
	string substr=str.substr(0, 5);
	cout << "str=" << str << endl;
	cout << "substr=" << substr << endl;

	str.erase(0, 5);
	cout << "str=" << str << endl;
}
int main()
{
	test18();
	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值