当前位置:C++技术网 > 资讯 > string系列:3 字符串string的修改和string的读取

string系列:3 字符串string的修改和string的读取

更新时间:2015-06-23 15:05:39浏览次数:1+次

1.string赋值
C++重载了=操作符,所以很简单。可以直接使用string对象、C风格字符串和字符赋值,如

string str("111"); 
string str2=str; 
str2 = "我是C风格字符串哦";
str2 = 'K';

还可以使用assign函数进行赋值,用法和初始化介绍的函数参数列表类似。


2.字符串string存取操作
C++重载了[]操作符,可以像数组一样操作string,如

string str("abc"); 
char ch = str[1];//ch为'b'
str[0]='d';//第一个元素被修改为了字符d

还可以使用at()成员函数。如

string str("abc"); 
str.at(0)='2';//str结果为"2bc"
char ch=str.at(1);//ch结果为'b'

区别就是:[]没有边界检查,at()有边界检查,at在超界后会报错,[]则不管。[]执行效率就高些,at更安全些。

string str("abcdefg");
str.substr(2,3);//返回索引为2开始的3个子字符串


3.修改字符串string
追加字符串可以使用+=和append()函数,可以支持string对象、C风格字符串和字符。
+=支持的形式有限,如果要对给出的字符串截取一部分追加,则要使用append函数。如

string str("h");
str.append("elloaaa",4);//将"elloaaa"前面4个字符追加到str中,最终str为“hello”

其他很多版本用法和在字符串初始化里讲到的类似。
还可以使用+好连接字符串,C++已经重载过。相加过的两个字符串生成一个新字符串。


4.插入字符到string
插入使用insert成员函数,第一个参数为插入的位置索引或者迭代器,之后的参数用来确定要插入的字符串的全部或者部分,参数pos表示插入的位置,n表示插入的字符个数。或者是迭代器的区间,起始位置和结束位置,迭代器区间不包括结束迭代器指示的元素。

5.删除string的字符
可以使用erase成员函数删除字符串对象的全部或部分字符,根据参数来确定删除的范围,也可以删除指定位置的一个元素,删除后返回删除元素的下一个元素。如果下一个是结尾则返回end()。


6.替换string中的字符
使用replace函数进行替换,参数中用来确定替换的字符串或者字符串的一部分,


7.查找string的字符
所有查找函数,如果找不到则返回string::npos,这是个类静态成员变量,相当于-1,但是在判断查找结果时使用string::npos好些。
find()系列:根据给出的字符串找到所在字符串的第一个出现的位置,以0为索引。各种参数和其他的类似,用来确定字串。查找顺序是从索引0开始的,知道结尾。
rfind()系列:查找最后一次出现的位置,这个位置还是从索引0到字符串结尾的顺序的一个索引位置。
find_first_of()系列:查找要查找的子字符串中包含的所有字符的任意一个第一次出现在被查找的字符串中的位置,从索引0开始查找。如string str("123456789"); string str2=("456");那么字符4、5、6任何一个在str出现都表示找到,谁先就是谁,这里的、最先找到的是4,所以索引位置为3.
find_first_not_of()系列:查找字符串中不在子字符串中的第一个字符的位置,从索引0开始查找。如

string str("123456789"); 
string str2=("456");

那么字符1、2、3、7、8、9任何一个在str出现都表示找到,谁先就是谁,这里的、最先找到的是1,所以索引位置为0.


8.string比较
使用compare函进行两字符串的比较,对象的字符串比参数中的字符串大则返回值大于0的值,等于返回0,小于返回小于0的值。也可以直接使用重载的<,>,==,>=,<=,!=进行比较。平常的比较是默认的比较规则,如果你愿意,可以自定义比较规则。


9.string复制和交换
使用copy()可以将一个字符串复制给另一个字符串,使用swap()可以交换两个字符串。


10.输入输出string
使用重载了的<<和>>可以进行输出和输入。还可以使用getline()进行输入。

后面的一些用法就没有列出每一个参数的意思,因为在参数的意义在这些成员函数中基本一样,没必要一个个介绍。只是稍加说明。这些是string提供的基本功能,如果无法满足你的需求,你可以对string进行继承,扩展功能。如:

class mystring:public string
{
   mystring();
   ~mystring();
   //do your overwrite ...
};

这里没深入分析,只是稍微列举。