C++ String::insert()函数详细测试情况

String::insert()函数详细测试情况

insert为String模板类(basic_string)的成员函数:

1.原型一: basic_string insert(pos1,num,c)其中,pos1位插入位置,num位插入数量,类型为size_type可当无符号 int使用,c为插入的字符,返回值为string 的临时变量(注意返回的不是原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;
}

结果:
在这里插入图片描述

2.原型二:basic_string insert(pos,str2)在pos位置往后插入字符串(或常量字符串)

测试如下:

#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;
}

结果:
在这里插入图片描述

3.原型三:basic_string insert(pos,cstr,num) 其中pos为插入位置,cstr为插入的C串

注意:第二个参数若为字符串(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;
}

结果:

C++ String::insert()函数详细测试情况_第1张图片

4.应用四:basic_string insert(pos1,str,pos2,num=npos) ,其中pos1被插入位置,将str从pos2位置往后的num个字符插入进去:

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;
}

结果输出:
C++ String::insert()函数详细测试情况_第2张图片
第二部:理解string::npos

#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’;
C++ String::insert()函数详细测试情况_第3张图片
第三步:理解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;
}

输出结果:
C++ String::insert()函数详细测试情况_第4张图片

5.应用五:string::iterator it=s1.insert(s.brging(),‘a’)通过迭代器来进行插入操作,(函数原型为:iterator insert(iterator pos,charT ch)或者iterator insert(const_iterator pos,charT ch)其中const_iterator为不可改变内容,例如s.cbegin()返回值)

从本质上来说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;
}

输出结果:
C++ String::insert()函数详细测试情况_第5张图片
第二步:理解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内容不可改变。

6.应用六:iterator insert(iterator pos,size_type num, char ct),在pos位置插入num个字符ct;其中pos也可以为const_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;
}

在这里插入图片描述

7.应用七:iterator insert(iterator pos,size_type input_first,size_type input_last),其中pos也可以为const_iterator没有实现,有机会再试

你可能感兴趣的:(C++)