string的基本函数使用

string是c++中常见的一个使用类,因为对字符串的操作的频繁性,string类的重要性是不言而喻的,那么了解string类,首先我们从对它的使用开始。

构造:
一般情况下,构造的使用是用字符或者字符串去初始化的,但初始化的方式也有很多种情况

string s;
	string s1("hello");
	string s2(s1,1,3);//从s1的第一个字符位置拷贝三个字符 
	string s3(s1);
	string s4= s1;
	string s5 ="hello";
	string s6('a');
	

以上的都可以是string的实例化。我们大多数用的还是用字符串进行初始化,或者拷贝构造。

遍历:
string类的遍历有三种方式,用下标,迭代器,范围for

	for(int i =0;i<s1.size();i++)
	{
		cout << s1[i] << endl; 
	}
	
	string::iterator it = s1.begin();
	
	while(it != s1.end())
	{
		cout << *it << endl;
		it++;
	}
	
	for(auto e: s)
	{
		cout<<e<<endl;
	}

这里的迭代器,存在四种,分别是正向反向,常量非常量,两两组合。构成四种

	string:: reverse_iterator rit = s1.rbegin();
	 
	while(rit != s1.rend())
	{
		cout << *rit << endl;
		rit++;
	}
	//这是倒数的遍历
	string:: const_iterator cit = s1.begin();
	while(cit != s1.end())
	{
		cout<<*cit<<endl;
		cit++;
	}
	

这是常量迭代器,常量迭代器只能读不能写。

基本函数:

长度(大小)函数:size,length,两种函数的使用是一样的,但是由于早期普遍用线性结构,所以是长度,但是到现在,非线性结构的增多,所以size更能表达大小的意思。

capacity 返回容量。
clear 清楚数据但不释放空间。
max_size返回能达到的最大长度,一般无用。
一般频繁的申请空间会损耗效率,所以reserve来申请空间。
但一般的申请空间会存在内存对齐,所以申请的大小可能与实际的大小不一样。
resize会改变容量,也会改变存放的多少。

如果resize小于本来存放的字符,则会删除多余字符,如果多于本来字符就会,补充,如果大于容量,则会扩容。

	string s1("hello");
	s1.resize(2);
	cout << s1<<endl;//he
	s1.resize(4,'a');
	cout <<s1<<endl;//heaa
	s1.resize(8,'a');
	cout << s1<<endl;//heaaaaaa 容量增大

字符串追加函数:
这里有三种函数,push_back append +=
第一个是追加字符的,第二个是追加字符串的,第三个什么都可以追加。
一般我们用第三个。不仅形象而且方便。

	string s;
	s.push_back('a');//a
	s.append("bbbb");//abbbb
	s+='c';//abbbbc
	s+="dd";//abbbbcdd

一般我们还可以在具体位置插入字符或者字符串。
有insert和erase函数。

	s.insert(s.begin(),'a');//在头部插入a字符
	cout<<s<<endl;
	s.erase(2,2);//在第二下标位置删除两个字符,不写长度默认全删
	cout<<s<<endl;
	

我们还可以用c_str的方式去返回c形式的字符串,用c去遍历。等同于返回了首字符地址。

	cout << s.c_str()<<endl;
	cout << s<<endl;

这两种方式都可以遍历字符串,但是不同点是,第一种是遇到‘\0’就结束了,因为c中是以这个字符为字符串截止标志,但是在c++string类中,不是这样的,它是直接讲其遍历完全,即,如果中间出现‘\0’的话,前者会停止遍历,而后者还是会遍历。

字符串查找与子串处理。
find和substr是查找与子串寻找。下面来看一个网址分割的例子

void divulr(const string& s)
{
	size_t pos = s.find(':');//从头开始查找字符:
	if (pos != string::npos)
	{
		cout<<s.substr(0,pos)<<endl;//从头开始取长度为pos的子串
	}
	size_t pos2 = s.find('/', pos + 3);//从pos+3的位置找/

	if (pos2 != string::npos)
	{
		cout << s.substr(pos + 3, pos2 - pos - 3) << endl;
	}

	cout << s.substr(pos2+1) << endl;
}

以上为基本的使用方法。还有如果字符串需要空格,如单词,那么就需要使用getline函数来输入字符,因为cin是遇到空格和换行就结束了,但是getline只遇到换行才结束。

	getline(cin,s);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值