Cpp||string类部分接口

String类的接口实现

一:string的基本用法

1.:用string类实例化对象的几种方式

(1).普通的方式实例化方式

string s;

(2).调用构造函数

string s1("hello world!");

(3).指定长度,并进行初始化

string s2(10,'$');

string 对象名(n,‘x’);其中n表示需要开辟的空间,x表示申请空间中填充的内容

(4).调用拷贝构造的方式实例化对象

string s(s1);
2:求字符串长度的方式
  1. 对象.size()的方式
  2. 对.length的方式
s.size();
s.length();
//计算并输出s字符串的有效字符个数

(2):字符串容量的求法

方式:对象 . capacity

s.capacity();

其中对象扩容的时候,当容量比较小的时候按接近2倍的大小扩容

当所需容量比较大的时候就按1.5倍的大小进行扩容

三:string类的其他用法
	cout << s1.empty() << endl;
	//判断字符串是否为空,结果为布尔值(1/0)
	string s4("hellow bit!");
	cout << s4[0] << endl;
	//s4[n]输出s4的第n个字符
	s4[0] = 'H';
	//s[n]='x' 改写字符串的第n个字符,如果n大于其容量就会抛异常
	//触发了assert检查

二:string类特殊用法

1.改变字符串容量的大小
s.resize(10);

调用形式: s.resize(size_t n);
resize函数将大小更改为第一个参数指定的长度

改变指定字符串的空间
在增大空间的时候其地址可能改变
在减小空间大小的时候地址不会改变

s.reszie(10,'&');	

调用格式:s.resize(size_t n,char ‘x’);
将字符串s的大小改为10,并将其值置为字符 'x’

s.resize(20, '5');	

对s进行了扩容,并将多处的空间初始化为’5’(既字符串s的前10个字符的值任然为指定的字符 ‘&’),该接口只是将改变后多出的值置为字符’5’
调用格式: s.size(size_t n,char ‘c’)

【小结】

此处的n有第三种情况
1.n<size size变成n,capacity大小不变
2.size<n<capacity size变成n,capacity不变
3.n>capacity size变成n,capacity增大,[size~n]这个范围中的值被置成’c’

【注】:此处的size值字符串的有效长度,capacity只的是字符串编辑器实际分配的容量大小

s.size(10);

调用格式:s.size(size_t n)

【小结】

1.n<size size变成n,capacity大小不变
2.size<n<capacity size变成n,capacity不变,[size,capacity]这个范围中的值被置成’\0’
3.n>capacity size变成n,capacity增大,[size,n],这个范围中的值被置成’\0’

	cout << s.c_str() << endl;
	//c语言的方法,按c 的格式获取.输出的是字符串的内容
	cout << hex << (int)s.c_str() << endl;
	//输出字符串的首地址(以16进制的方式输出)
给字符串s的预留空间
	s.reserve(20);
	s.reserve(5);

给s预留空间,不会改变有效元素个数(不会改变原来字符串的内容)

调用格式void reserve(size_t n=0):

提高效率,减少工作时间

【小结】

reserve用来增容,提高效率,减少增容操作

当n<capacity时,不会对字符串做任何改变

当n>capacity时,进行增容,不改变size的大小

NO2:改变字符串的内容
	s += " haha";
	s += '!';
	string s1("hehe!");
	s += s1;

通过这种方式可以将字符串的内容进行扩展,既会改变字符串的有效字符串长度,当所加内容与原字符串的有效长度之和大于源字符串的容量,还会对字符串进行扩容

NO3:添加字符串
	s += 'w';
	//添加字符
	s.append("ang");
	s += " shi xian";
	//添加字符串

接口append此处用来往指定字符串中添加内容

	string s="hello world!"
	string s1;
	s1.assign(s);
	cout << s1 << endl;
	//复制了s的内容,打印出的内容和s的一样

	s1.assign(s,0,3);
	//在s中从第0个位置拿上3个字符给s1;
	cout << s1 << endl;


	s1.assign(10,'a');
	//s.assign(size_t n,'x');将s1中的内容改成n个'x'
	cout << s1 << endl;

	s1.assign(s.begin(), s.end());
	//拷贝整个字符串s
NO4:插入接口
	string s;
	s.insert(0, "hello");
	cout << s << endl;
	s.insert(0, "bit!");
	cout << s << endl;

调用方式:s.insert(size_t pos,const string& str)

从字符串位置为0的位置开始头插指定的内容

	string s="hello world!";
	string s1;
	s1.insert(0,s,3,5);

往s1中插入s中第0个位置开始数第3元素往后的5个元素

NO5:删除(erase)
	string s("hello bit!");
	s.erase(0,4);
	//删除从第0个位置开始的4个字符
	cout << s << endl;	

调用方式: string& erase(size_t pos,size_t len);
删除指定位置下标pos开始len个字符

【小结】

如果输入的length大于字符串长度,取实际长度和length的大小中的 较小者(既将所有的字符删除掉)

NO6:代替(replace)
	string s("hello bit");
	string s1("haha");
	s.replace(0, 2, s1);
	//用s1中的 内容来代替s中从位置0开始的2个字符
NO7:拷贝另一个字符串中指定的内容
	string s1 = s.substr(2,8);
	//s1拷贝字符串s中从位置2到位置8的内容

调用方式:substr(size_t pos=0,size_t n);
拷贝从字符串s中的位置0开始的n个字符

NO8:查找
	size_t pos = s.find('o');

从字符串s中从头开始查找指定字符第一次出现的位置

size_t pos =s.rfind('o');

rfind()从指定字符串的尾端开是查找第一个’o’出现的位置

	string add = "http://www.cplusplus.com/reference/string/string/";
	size_t pos1 = add.find("://");

输出的是字符串中第一个字符的位置

	size_t sz = add.find('/',pos1 + 3);

调用方式: find(char ‘x’,size_t pos);
从指定的位置下标pos开始查找指定的字符’x’

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值