c++ string的详细用法(1)assign()

//字符串变量
string a="123";
string b="456";

1.字符串直接赋值
a.assign(b); //等于a=b赋值,结果为 a="456"
a.assign("789");//结果为 a="789"

2.一个字符串的子串赋值给另一个字符串
a.assign(b,begin,len);
//从字符串b的第(begin)个字符开始向后数(len)个字符(包括begin)的字符串赋值给字符串a

例:
a.assign(b,0,1); //结果为 a="4"
a.assign(b,1,1); //结果为 a="5"
a.assign(b,0,2); //结果为 a="45";
a.assign(b,1,2); //结果为 a="56";
a.assign("123456",1,3); //结果为 a="234";
/*说明
 *如果第三个参数大于字符串本身的长度,则赋值到该字符串末尾
 *如:a.assign(b,1,4); 结果为 a="56";
 *如果第二个参数大于字符串本身长度则赋值为空
 *如:a.assign(b,3,4); 结果为 a="";
 *第二个参数最大不能超过字符串长度加一,否则程序会运行错误。因为string字符串后面会有一个"\n"符号,这个符号虽然不算在字符串长度里面,但是会占一个字符的空间。所以超过字符串长度加一后会出现std::out_of_range的错误。
 */
 
3.从字符串的某一个字符串开始到结束赋值给另一个字符串
a.assign(b,begin);
//从字符串b的第begin字符串开始到字符串结束赋值给字符串a

a.assign(b,0); //结果为 a="456";
a.assign(b,1); //结果为 a="56";
a.assign(b,4); //error 这样会运行错误(同2) vs2019

4.从字符串开始到字符串的某一个字符赋值给另一个字符串
a.assign("123456",2);//结果为 a="12"
string c="123456";
a.assign(c,2);       //结果为 a="3456"
//根据vs2019运行情况来看,如过第一个参数是字符串常量则按从头到第n个字符赋值,如果第一个参数是字符串变量的话,则从第n个字符开始到字符串结尾赋值(不知道其他编译会是怎么样的,vs2019是调用不同的重载函数)

5.用相同的n个字符给字符串赋值
a.assign(10,'b'); //结果为 a="bbbbbbbbbb";
a.assign(5,'c');  //结果为 a="ccccc";

6.template<class inputIterator> string& assign(inputIterator first,inputIterator last);
//使用这个函数需要引入#include<iterator>头文件 
a.assign(istream_iterator<char>(cin), istream_iterator<char>());
//键盘输入123abcd
//结果为 a="123abcd";
/*注意
 *该函数不接收空格换行等符号,最后(windows系统)按ctrl+z结束输入
 *如输入以下符号(既有空格也有换行)
 123abc    ABC  哈哈 !@#$



 defg)(-=<>-+/*


 123654
 最后结果为 a="123abcABC哈哈!@#$defg)(-=<>-+/*123654";
 */

7.使用迭代器赋值
a.assign(b.begin()+1,b.end()); //结果为 a="67";
a.assign(a.begin(),a.end());   //结果为 a="123";
发布了20 篇原创文章 · 获赞 62 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40630246/article/details/103643728