insert为String模板类(basic_string)的成员函数:
测试如下:
#include
#include
using namespace std;
int main() {
string s1 = "0123456";
string s2=s1.insert(2,3,'A');
cout << s1<<"\n";
cout << s2 << "\n";
system("pause");
return 0;
}
测试如下:
#include
#include
using namespace std;
int main() {
string s1= "0123456";
string s2= "0123456";
string str = "BBB";
s1.insert(2, "AAA");
s2.insert(2,str);
cout << s1<<"\n";
cout << s2 << "\n";
system("pause");
return 0;
}
注意:第二个参数若为字符串(string)则num实际上为pos(见4),下例中一起进行对比
#include
#include
using namespace std;
int main() {
string s1= "0123456";
s1.insert(2,"hello",3);
cout << s1<<"\n";//参数为const char*时候,num表示为“从前往后的3个字符",还不信的化见下
string s2 = "0123456";
char str[] = "hello";//str为const char*类型
s2.insert(2, str, 3);
cout << s2 << "\n";
string s3 = "0123456";
string sstr = "hello";
s3.insert(2,sstr,3);
cout << s3 << "\n";//str为string类型时候,num表示“从第num位置开始往后的所有字符”
system("pause");
return 0;
}
结果:
npos为size_type可以表示的最大值(可以理解为字符串的最大长度),此处理解起来有点费劲,可以通过下面几个例子以暂时理解
第一步:理解size_type
#include
#include
using namespace std;
int main() {
string s= "abcdefg";
int pos1 = s.find('c');
cout << pos1 << "\n";
string::size_type pos2 = s.find('c');//size_type是为了在不同机器上运行所设置的(例如有的int32位,有的int 64位,那么以int作为pos的数值类型就不合适了)
cout << pos2 << "\n";
system("pause");
return 0;
}
#include
#include
using namespace std;
int main() {
cout << string::npos << "\n";//可见string::npos为string类的一个静态变量其值为固定值
string s= "abcdefg";
int pos1 = s.find('h');
cout << pos1 << "\n";
string::size_type pos2= s.find('h');//npos转为int
cout << pos2 << "\n";
system("pause");
return 0;
}
输出结果:由输出结果可以看出一旦找不到‘h’则返回npos值,若使用int(pos1)接受则为’-1’;
第三步:理解basic_string insert(pos1,str,pos2,num=npos)
#include
#include
using namespace std;
int main() {
cout << string::npos << "\n";
string s1= "0123456";
string str1 = "ABCDEF";
s1.insert(2, str1, 3, 2);//在s1的2号位置插入str1中的3号位置往后的2个字符
cout << s1 << "\n";
string s2 = "0123456";
string str2 = "ABCDEF";
s2.insert(2, str2, 3, 100);//在s2的2号位置插入str2中的3号位置往后的100个字符
cout << s2 << "\n";
string s3 = "0123456";
string str3 = "ABCDEF";
s3.insert(2, str3,3);//在s2的2号位置插入str2中的3号位置往后的所有字符
cout << s3<< "\n";
system("pause");
return 0;
}
从本质上来说string可以理解为一个容器,所以有设计迭代器的操作方式。
第一步:理解迭代器操作:
#include
#include
using namespace std;
int main() {
string s1= "0123456";
for (string::iterator it = s1.begin(); it != s1.end(); it++)
cout << *it<< "\n";//可见迭代器本质上是指针
system("pause");
return 0;
}
输出结果:
第二步:理解string::iterator it=s1.insert(s.brging(),‘a’),返回的值不再是string而是iterator
#include
#include
using namespace std;
int main() {
string s1= "0123456";
string::iterator it=s1.insert(s1.end(),'A');//第二个参数只能是字符
cout << s1 << "\n";
cout << *it << "\n";//it此时指向插入的位置
system("pause");
return 0;
}
输出结果:
第三部:理解const_iterator pos,此时const并非指pos不可改变而是指iterator内容不可改变。
#include
#include
using namespace std;
int main() {
string s1= "0123456";
string::const_iterator it=s1.insert(s1.end(),5,'A');
cout << s1 << "\n";
cout << *it << "\n";
system("pause");
return 0;
}