c++中std::string,stl string实现
一、字符串对象的定义和初始化
1 .字符串标准库支持四种构造函数。
字符串S1;//默认构造函数,s1是空字符串
字符串S1(S2);//将s2初始化为s1的副本
字符串s3(“值”);//将s3初始化为字符串的文本副本
字符串s4(n, c );//将s4初始化为字符“C”的N个副本
其他施工方法:
String( str,n) //初始化为str指向的数组的前n个元素的副本
String( str pos,n) //从str pos开始复制n个元素
String( s2,pos) //从下标pos开始初始化为s2(string对象)的字符串的副本
字符串(s2,位置,长度)
2.读写2 .字符串对象
A.读取并忽略开头的所有空白字符(如空格、换行符、制表符)
读取字符,直到再次遇到空白字符,终止读取;(读单词)
?
一个
2
三
四
五
六
七
八
int main()
{
字符串S1;
而(cin s1)
cout s1 endl
返回0;
}
B.使用getline()读取整行文本。getline()不会忽略行首的换行符。只要读到换行符,果断停读。
行不包含换行符。如果需要逐行输出,必须自己添加换行符。(换行符不存储在getline()读取的字符串对象中)
?
一个
2
三
四
五
六
七
int main()
{
弦线;
while( getline(cin,line))
cout line endl
返回0;
}
二。字符串对象的操作
1.简单操作列表
S.empty() //如果s为空字符串,则返回true,否则返回false
S.size() //返回s中的字符数
S[n] //返回S中位置为N的字符,位置从0开始计数。
S1//将S1和s2链接成一个新的字符串,并返回新生成的字符串。
S1=s2 //用s2的副本替换S1的内容
V1==v2 //比较V1和v2的内容,返回true和false。
,=,=和=
2.常用键操作
A.插入
S.insert(pos,s2) //在下标pos之前插入s2的副本
S.insert(pos,s2,pos2,len) //从s2中pos2的下标开始,在下标pos之前插入长度为len的字符串的副本。
B.完全取代s。
S.assign(s2) //用s2的副本替换S
S.assign(s2,pos2,len) //用s2中pos2的len长度字符串替换S。
C.删除
S.erase(pos,len) //从下标pos中删除len字符。
D.返回子字符串(返回字符串的对象)
S.substr(pos,n) //返回从下标pos开始的长度为len的子字符串
S.substr(pos) //从s[pos]到结尾
e .追加和替换
s.append(字符串);//在s后面添加字符串
s.replace(pos,len,str);//replace s. replace (1,5,str)=s. erase (1,5) s .在s的pos下标开头用str插入(1,str)
F.string类型的查找操作
类型查找操作都返回string:size_type类型的值,并以如下形式查找匹配发生的位置;或者返回一个名为string:npos的特殊值,表示没有匹配。
S.find(str) //查找子字符串str
S.find(str,pos) //从下标位置开始搜索
S.rfind(str) //向后看,从后往前看。
?
一个
2
三
四
字符串s( asdfasdfwqe );
string:size _ type pos 1=s . find( s );//pos1的值为1
pos 1=s . rfind( s );pos1的值是5
pos 1=s . find( w );pos1的值变成npos
3.预防措施
B.使用string:size_type type接收s.size()的返回值(无符号),这是为了保证库类型的机器独立性。不要将size()的返回值赋给int;
c、关系运算符的比较时空字符少于任意字符;
D.字符串对象和字符串文字之间的链接:每个运算符的左右操作数中至少有一个必须是字符串类型。
E.从字符串对象获取字符
下面的string对象表从0开始,到string[s.size()-1]结束;
?
一个
2
三
四
五
string str( some string );
for(string:size _ type IX=0;ix!=str . size();九)
{
cout str[IX]endl;
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。