string类的学习

虽然在C++中常用到CString类,但是在win32控制台中并不是能很好的应用。在c语言中也存在着string这个标准库,用起来也是十分的强大。

首先unique这个函数。它能够将重复的字符进行折叠处理。

string str = "we need your help!";
unique(str.begin(),str.end());
cout<<str<<endl;
输出的结果是we ned your help!!。这个结果是这样的,首先unique这个函数只能够将相邻的两个字符进行比较,如果两个字符相同,则只保留一个。由于只有need是两个ee相邻,其他虽然有e但是其与左右并不相同。所以可以看到need变成了ned。其次为什么结果会多出个‘’!‘’呢?这是因为虽然unique对原字符串进行了折叠,但是原字符串大小并没有变化。unique的主要作用原理是将字符考出,折叠后再拷贝回原来的位置中。如果恰好没有被拷贝进来的字符覆盖,那么原来的字符仍然是保留的,这里的“!”第一个是原来拷贝出去的那个,由于缩减了一个字符,所以所有字符都向前移了 1位,那么最有一个‘!’就没有被覆盖。所以最终我们看到了这样的结果。如何将之后多出来的“!”删除呢?这里就要引入一个string类的成员函数erase()。

unique()函数返回的是迭代器,指向拷贝的后一个元素对象。而erase有三种用法。1,erase(num1,num2),将字符串从num1开始删除num2个字符。2,erase(iterator),删除iterator指向的字符。3,erase(iterator1,iterator2),删除iterator1到iterator2所指向的对象。

这里我们将用erase到第三种用法。

str.erase(unique(str.begin(),str.end()),str.end());
这样我们得到的结果就是we ned your help!.

那么如何将字符串中所有相同的数组只保留一个呢?聪明的你一定想到将字符中相同的字符放在一起不久好了吗!而这个就是sort函数完成的。不过记得要加上头文件<algorithm>。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值