#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1 = "aaaaaaAAA001002003 ";
string s2;
int flag;
flag = s1.find("AAA");
if(flag < s1.length())
{
s2.assign(s1,flag + 3,s1.length()-1); //此处的assign函数,第三个参数。
s1.erase(flag,s1.length());
cout<<s1.length()<<endl;
}
cout<<s1<<" ";
cout<<s2;
system("pause");
return 0;
}
以上是测试的代码,在标有注释的第三个参数,也就是s1.length()-1这里(因为最后一个字符为空格,所以-1)
但是无论是改为-1,-2,-3,最后输出的结果都是"001002003 ",编译器每次都ReBuild了。
所以我的问题是:第三个参数是不是不能参与运算?必须包含最后一个空格进去嘛?
这类问题首先应该去查查文档,看看
assign
接口到底怎么定义,怎么使用的,然后会看到string& assign (const string& str, size_t subpos, size_t sublen);
就从参数名基本上可以了解第二个参数是起始位置,第三个参数是子串长度,这一点从后面的解释也可以看到
这就说得很明白了,如果字符串不够长(比如指定的
sublen
比较大),就有多少算多少。很显然,这个用例中,如果要截断后面的字符串,至少要-10
才行。