C++STL中String类的分析与运用

[Mollnn.Fan原创,转载请注明出处]
本来以为有了String类,所有的字符串操作都变得非常简单。然后,在某次实际测试中反应出了很大的问题。原本只涉及到区区一个replace,在有参考资料的状态下10分钟轻松解决的问题,只因为忘记了replace函数的原型,导致了问题的复杂化。说实话,对于MFC的CString我或许更加熟悉,但应付竞赛需要,现在开始改掉用MFC的习惯。
在那道替换问题中,我没有采用函数replace,或者说根本没有采用String类来进行字符串处理。取而代之的是一个自己撰写的_replace函数,然而在使用这个函数的过程中,也发生了一些问题。因为对传入参数的误操作,导致一个20分钟轻松完成的程序变成了80分钟的累赘……
然而本篇的重点不在于此,而是要借此复习一下String类的一些基本用法。
1.构造函数
这里写图片描述
上文揭示了string的三种构造方法,当然还漏了最常用的默认构造。
2.operator[]和at()
同其他stl容器一样,at带有下标越界检查。
3.转换为字符串数组
const char *data()const;//返回一个非null终止的c字符数组
const char *c_str()const;//返回一个以null终止的c字符串
4.特性描述
用length获取字符串的长度。
用empty判断是否为空。
5.流输入
除了通过重载的流操作运算符,还可以通过:
getline(istream &in,string &s);用于从输入流in中读取字符串到s中,以换行符’\n’分开。
6.拷贝函数
原型:
将从当前串pos开始的n个字符拷贝到s数组中。
7.赋值
string &assign(const char *s);//用c类型字符串s赋值
string &assign(const string &s,int start,int n);//把字符串s中从start开始的n个字符赋给当前字符串
8.连接
string &append(const string &s,int pos,int n);//把字符串s中从pos开始的n个字符连接到当前字符串的结尾
事实上,+=操作符已经足够方便。
9.比较
比较是字符串中一个很重要的内容。我们通过一个简单的案例来了解string类提供的重载运算符的优势:
这里写图片描述
编译后,运行结果为01.若我们将串1改为9999,则输出10.
显见,这是一种极为方便的比较方式。
事实上,对于限制范围的比较,我们可以通过compare成员函数的一种重载来实现。
int compare(int pos, int n,const string &s,int pos2,int n2)const;//比较当前字符串从pos开始的n
个字符组成的字符串与s中pos2开始的n2个字符组成的字符串的大小
显而易见,将自己的pos—n与s的pos2—-n2比较。如果自己大就是1,==就是0,小就是-1.
10.子串提取
子串提取十分方便,只需要通过一个成员函数来完成即可。
string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串
11.交换
这继承了STL的通用特点。也就是a.swap(b);
12.查找基础
在这里只提及一种查找,
int find(const string &s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置 //查找成功时返回所在位置,失败返回string::npos的值
改为rfind则反着找。
对于本字符串,从pos开始寻找s第一次出现的位置。
同样,若在后面增补长度参数,就可以限制s的长度。当然,也可以把const char*改为string。
13.替换基础
替换函数也是使用频率很高的一种函数。在某些语言中,比如VISUAL BASIC,自带的字符串处理函数可以直接将某种字符串替换成另一种。但是在这里,需要绕个弯。
string &replace(int p0, int n0,const string &s, int pos, int n);//删除p0开始的n0个字符,然后在p0处入串s中从pos开始的n个字符
这是最基本的定义原型。事实上,在&s后增补pos和nlen就可以对&s的使用范围进行限制。
这个函数表示将从p0开始的n0个字符删除后,在这里插入s,这样会比自己写要简单也快捷的多。
14.查找与替换的综合
这里写图片描述
这是一个简单的替换实例,替换的结果为good morning!
第一句我们采用了原始的替换方法。
同时,我们对这个比较繁琐的替换代码进行了宏封装,因此使用第二句也可以替换。
15.插入与删除
string &insert(int p0,const string &s, int pos, int n);
string &erase(int pos = 0, int n = npos);

最终,我们来总结归纳一下string类常用参数列表的共同特点。
Func_name([base list], [tar_string], [pos], [num]);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值