//字符串变量
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";
c++ string的详细用法(1)assign()
最新推荐文章于 2024-07-18 08:46:24 发布