string b = "5678";
1.在string字符串某一个位置上插入另一个(string)字符串
insert(int,string&);
a.insert(0, b); //结果为 a="56781234";
a.insert(2, b); //结果为 a="12567834";
insert(int,const char*);
a.insert(3,"abcd");//结果为 a="123abcd4";
2.在string字符串某一个位置上插入另一个字符串的前n个字符
insert(int,const char*,int);
a.insert(1,"abcd",2); //结果为 a="1ab234";
3.在string字符串某一位置上插入另一个string字符串(从下标为n的位置开始到结束)
insert(int,string&,int);
a.insert(1,b,2); //结果为 a="178234";
4.在string字符串某一位置上插入另一个(string)字符串(从下标为n的位置开始连续m个字符)
insert(int,string&,int,int);
a.insert(2,b,1,2); //结果为 a="126734";
a.insert(0,b,0,3); //结果为 a="5671234";
insert(int,const char*,int,int);
a.insert(2,"5678",1,2); //结果为 a="126734";
5.在字符串中插入n个字符
insert(int,int,const char);
a.insert(2,5,'k'); //结果为 a="12kkkkk34";
insert(iterator,const char);
a.insert(a.begin()+3,'k'); //结果为 a="123k4";
insert(iterator,int,const char);
a.insert(a.begin()+3,10,'k'); //结果为 a="123kkkkkkkkkk4";
6.在字符串某个位置插入另一个字符串的某一个区间字符
insert(iterator,const_iterator_first,const_iterator_last);
a.insert(a.begin() + 1, b.begin() + 1, b.end() - 1);//结果为 a="167234";
4.取改 单一字符 [ ], at() 替换字符replace()
可以使用下标操作符[]和函数at()对元素包含的字符进行访问。但是应该注意的是操作符[]并不检查索引是否有效(有效索引0~str.length()),如果索引失效,会引起未定义的行为。而at()会检查,如果使用 at()的时候索引无效,会抛出out_of_range异常。
1.获取string字符串某一个字符 auto s=a.at(1); 2.修改string字符串某一个字符 a.at(2)='1';
使用[]同理;还有stl的迭代器和front(),back()也可以
不赞成类似于下面的引用或指针赋值:
char& r=s[2];
char* p= &s[3];
因为一旦发生重新分配,r,p立即失效。避免的方法就是不使用。
遍历所有字符,这可由C风格的索引或STL迭代子来完成(如果无需修改,应使用const_iterator)。
std::string name = "marius";
for(size_t i = 0; i < name.length(); ++i)
std::cout << name[i];
for(std::string::const_iterator cit = name.begin(); cit != name.end(); ++cit)
std::cout << *cit;
for(std::string::iterator it = name.begin();it != name.end(); ++it)
*it = toupper(*it);
string s="il8n";
s.replace(1,2,"nternationalizatio");//从索引1开始的2个替换成后面的C_string
std :: string类的替换函数
函数1:std::string & replace ( (size_type pos1, size_type n1, const std::string & str, size_type pos2 = 0, size_type n2 = npos )) ;
s1.replace(1, 3, "123456", 2, 4); //用 "123456" 的子串(2,4) 替换 s1 的子串(1,3)
该函数的作用:使用str字符串从位置pos2开始的n2个字符,替换当前字符串从pos1位置开始处的n1个字符。即该函数将当前字符串从pos1开始的n1个字符全部删除,然后再用str整个字符串或者str从pos2开始的n2个字符,从pos1位置开始填入到当前字符串中。
提醒:如果n1或者n2的数值超出了对应字符串的长度,以实际长度为准,不会出现访问越界的情况。
注意:函数(1~4)
a、如果pos1指定的位置超出当前字符串的范围,抛出std::out_of_range异常,不捕捉将导致coredump。
b、如果pos2指定的位置超出替换字符串str的范围,抛出std::out_of_range异常,不捕捉将导致coredump。
函数2:std::string& replace(size_type pos, size_type n1, const char * s, size_type n2);
该函数的作用:使用字符串s的前n2个字符,替换当前字符串从pos位置开始处的n1个字符。即函数将当前字符串从pos开始的n1个字符全部删除,然后再用字符串s的前n2个字符填入到当前字符串中。类似于函数1的pos2等于0,必须指定n2的这种情况,但也有一点的差别,下面会注意里描述这种差别。
a.replace(6, 3, "THJKL", 2); //结果为 a="1234abTH678efgh";
函数3:std::string& replace(size_type pos, size_type n1, const char* s);
s2.replace(n, 5, "XXX"); //将子串(n,5)替换为"XXX"
该函数的作用:使用以''为结尾的字符串s,替换当前字符串从pos位置开始处的n1个字符。即函数将当前字符串从pos开始的n1个字符全部删除,然后再用字符串s从开始到以''结束的