String 容器

目录

概述:

创建方式:

常用函数方法:

assign,赋值函数

append,拼接函数

find、rfind、replace,查找与替换

find       

rfind

replace

字符串比较

获取单个字符

字符串的插入与删除

获取字符串中的子串


概述:

        string其实是一个类。string容器在头文件<string>中,用来保存字符串,其容器内每个字符都是char*类型的。

创建方式:

        有四种常见的创建方式:直接定义(默认初始化为空)。运用const char*类型来初始化。复制其他的字符串(地址不同)。string(int n, char c);使用n个字符c来初始化字符串(在创建并初始化时才能用)。

	//第一种
	string s1;   //等同于 string  s4 = "";
	cout << s1 << endl;
	cout << &s1 << endl;

	//第二种,其实就是用const char*来初始化
	string s2("Hello");
	cout << s2 << endl;
	cout << &s2 << endl;
	/*//这种和第二种是一样的
	const char* a = "hello";
	string s2(a);*/

	//第三种,复制其他的字符串
	string s3 = s2;
	cout << s3 << endl;
	cout << &s3 << endl;

	//第四种,使用3个字符s来初始化字符串
	string s4(3, 's');
	cout << s4 << endl;
	cout << &s4 << endl;

常用函数方法:

assign,赋值函数

        assign用于给string赋值。assign有多个重载,一:assign(const char* c);就是将c赋给string(和“=”相同作用)。二:assign(const char* c, int k);将c的前k个字符赋给string(若第二个参数大于c的长度,则将c赋给string,但这时调用length函数会获取到k而不是c的长度)。三:assign(int n, char c); 将n个字符c赋给string。

	string s1;   

	s1.assign("Hello World");
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

	s1.assign("Hello World", 5);
	cout << s1 << "  s1的长度为:" << s1.length() << endl;
	//第二个参数大于第一个参数的长度
	s1.assign("Hello World", 20);
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

	s1.assign(6, 's');
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

append,拼接函数

        append用于在字符串后方拼接字符串,它有多个重载函数。一:append(const char* c)与append(string &s),这两个效果相同,都是直接将字符串c(s)拼接到后面。二:append(const char* c, int k)将c的前k个字符拼接到字符串后面(若第二个参数大于c的长度,则将c赋给string,但这时调用length函数会发现字符串长度比原来大k而不是c的长度)三:append(const char* c, int pos, int n);将c的从pos开始,一共n个字符添加到字符串后面。

	string s1("Hello ");
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

	s1.append("World", 3);
	cout << s1 << "  s1的长度为:" << s1.length() << endl;
	
	string s2("Hello ");
	s2.append("World", 8);
	cout << s2 << "  s2的长度为:" << s2.length() << endl;

	string s3("Hello ");
	s3.append("World", 1, 3);
	cout << s3 << "  s3的长度为:" << s3.length() << endl;

find、rfind、replace,查找与替换

        find默认查找第一次出现的位置、rfind(Reverse Find)默认查找最后一次出现的位置,找到了会返回位置(从0开始),没找到会返回-1。replace替换字符串。

find       

        find(const char c, int pos = 0),从s【pos】开始寻找字符c。find(const char* c, int pos = 0);从s【pos】开始寻找c。find(const char* c, int pos, int n);从s【pos】开始寻找c的前n个字符第一次出现的位置(若n大于c的长度,则找不到,返回-1)。find(string &s1, int pos = 0),从s【pos】开始寻找s1。

	string s1("Hello ");
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

	const char c1 = 'l';
	int k = s1.find(c1);
	cout << k << endl;

	//从s1【2】开始查找c2
	const char* c2 = "l";
	 k = s1.find(c2, 2);
	cout << k << endl;
	//从s1【3】开始查找c2
	k = s1.find(c2, 3);
	cout << k << endl;

	//从s1【3】开始查找c2前1个字符
	k = s1.find(c2, 3, 1);
	cout << k << endl;

	string s2 = "lo";
	k = s1.find(s2);
	cout << k << endl;

rfind

注:下方的npos表示字符串s1的最后一个下标

        rfind(const char c, int pos = npos);从s1【npos】开始向前寻找第一次出现c的下标。rfind(const char* c, int pos = npos);从s1【npos】开始向前寻找第一次出现c的下标。(若输入的第二个参数大于npos,则默认为npos)。rfind(const char* c, int pos, int n);从s1【pos】开始向前寻找c的前n个字符第一次出现的位置(若n大于c的长度,则返回-1.)。rfind(string &s2, int pos = npos);从s1【npos】开始向前寻找第一次出现s2的下标。

	string s1("Hello ");
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

	//第二个参数不写则从最后向前查找。
	const char c1 = 'l';
	int k = s1.rfind(c1);
	cout << k << endl;

	//从s1【10】(其实是s1【5】)开始向前查找c2
	const char* c2 = "l";
	 k = s1.rfind(c2, 10);
	cout << k << endl;

	//从s1【3】开始向前查找c2
	k = s1.rfind(c2, 3);
	cout << k << endl;

	//从s1【12】开始向前查找c2前1个字符
	k = s1.rfind(c2, 12, 1);
	cout << k << endl;

	string s2 = "lo";
	k = s1.rfind(s2);
	cout << k << endl;

replace

        replace(int pos, int n, const string &s2)、replace(int pos, int n, const char* c);将从s1【pos】开始的n个字符串替换为s2(c)。若n+pos大于s1的长度,则会将s1【pos】开始的所有字符串都替换为s2(c)。

	string s1("Hello ");
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

	const char* c = "iittt";
	s1.replace(2, 3, c);
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

	//10+2(n+pos) > 6(s1的长度)
	string s2 = "llo";
	s1.replace(2, 10, s2);  //此时si的长度变为5而不是6
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

字符串比较

        compare用于比较两个字符串之间的ASCII值,它是从左往右一个字符一个字符地比较,若s1【i】大于s2【i】,返回1;若s1等于s2,则进行下一个字符比较,若全相等,返回0;若s1小于s2,返回-1。注意,string类型 可以用“==”比较是否相同,但char类型的不行。

	string s1("Hbaaa");
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

	string s2("Hazzz");
	cout << s2 << "  s2的长度为:" << s2.length() << endl;

	cout << s1.compare(s2) << endl;

获取单个字符

        at函数,返回值是一个char类型的字符。用法与"[]"相同。

	string s1("Hello");
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

	char c = s1.at(1);
	cout << "s1第二个字符为:" << c << endl;

	s1.at(2) = 'a';
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

字符串的插入与删除

        string通过insert插入,erase删除。insert(int pos, string &s2)、insert(int pos, const char* s2);在s1【pos】处插入s2。insert(int pos, int n, char c);在s1【pos】处插入n个字符c。erase(int pos, int n = npos);删除从s1【pos】开始的n个字符(没有第二个参数或者第二个参数大于等于s1在pos后面的字符数,删除从s1【pos】开始的所有字符)。

	string s1("Hello");
	cout << s1 << "  s1的长度为:" << s1.length() << endl;
	//从s1【1】处插入c1
	const char* c1 = "1111";
	s1.insert(1, c1);
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

	//从s1【2】处插入s2
	s1 = "Hello";
	string s2 = "2222";
	s1.insert(2, s2);
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

	//从s1【3】处插入4个c2
	s1 = "Hello";
	const char c2 = '3';
	s1.insert(3, 4, c2);
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

	//从s1【3】开始,删除4个字符
	s1.erase(3, 4);
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

	//从s1【2】开始,删除100个字符(后面没有100个,所以和没有第二个参数同个功能)
	s1.erase(2, 100);
//同 s1.erase(2);
	cout << s1 << "  s1的长度为:" << s1.length() << endl;

获取字符串中的子串

        substr (sub-string:子字符串)。substr(int pos);获取从s1【pos】开始的所有字符组成的字符串。substr(int pos, int n);获取从s1【pos】开始的n个字符组成的字符串(若pos+n大于s1的长度,则效果同没有第二个参数)。

	string s1("Hello");
	cout << s1 << "  s1的长度为:" << s1.length() << endl;
	
	string s2 = s1.substr(1);
	cout << s2 << "  s2的长度为:" << s2.length() << endl;

	s2 = s1.substr(1, 2);
	cout << s2 << "  s2的长度为:" << s2.length() << endl;

	s2 = s1.substr(2, 7);
	cout << s2 << "  s2的长度为:" << s2.length() << endl;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值