string基本操作代码:

#include<iostream>
#include<stdio.h>
#include<string>

using namespace std;

void Constructor_string()//string构造
{

	string str = "abc";//string str("abc");
			cout << str << " 用一个字符串为元素赋值"<<endl;
	string str1(5, 'a');
			cout << str1<<" 用n个字符为元素赋值"<<endl;
	string str2("abcde", 4);
			cout << str2 << " 用字符串的前几个字符为对象初始化" << endl;
	string str3(str2, 2, 3);
			cout << str3 << " 用另一个对象的一段(参数2与3为下标值)为此对象赋值" << endl;
	string str4(str);
			cout << str4<<" 拷贝构造"<<endl;
}

void Attribute_string()//string修改
{

	string str("abcde");

	//输出字符串长度:
	cout << str.length() << " 字符串长度"<<endl;

	//输出元素个数:
	cout << str.size() <<" 元素个数"<<endl;

	//容量大小是依据编译器的,在vs上(2017),默认一开始(少于等于15个容量占用时)申请15个容量,而后每次增加16个容量。;在vc6.0上是至少申请31个空间,以后每次增加32个。
	cout << str.capacity() << " 容量大小"<<endl;

	//调整大小,左对齐。重新设置字符个数,如果num<=原来个数,容量不变,否则容量会改变。改变规律为15->32->47->63.....
	str.resize(3);

	str.reserve(16);//修改容量,不能变小,只能变大。变大规律为15->32->47->63.....
}
void Output_string()//string输出
{

	//指针输出 (c_str()返回指针p,指针p指向new的空间中,这个空间存储着字符):
	string str("qwerty");
	cout << str.c_str() <<" 指针输出"<< endl;

	//[]下标输出: 不能越界,越界崩溃。
	cout << str[0] <<" []下标输出"<< endl;

	//at()输出: 越界异常,如果越界抛出一个out_of_range
	//异常修改:

	// try {
	// str.at(8);
	// }
	// catch (...) {
	// cout << "越界了" << endl;
	// }
	cout << str.at(1)<<" at()输出" << endl;

}	
	
void Modification_string()//string修改
{

	//修改指定元素:

	string str("asdfghjkl");
	str[0] = 's';
	str.at(1) = 'v';

	//中间插入(常用insert):

	string str1("abcde");
	string str2("vvv");

	str1.insert(0, str2);//str1.insert(n,val) 将val(val可以是另一个对象,也可以直接是一个字符串)插入到下标为n的字符的前面 
	cout << str1 << " 插入一个val" << endl;

	str1.insert(1, 2, 'c');//cout << "str1.insert(n,num,val) 在第n个位置前插入num个相同字符val 
	cout << str2 <<" 插入n个val"<< endl;

	//尾巴插入(常用append):
	string str3("abc");
	string str4("ppp");

	//str3.append(str4);// 括号内可以是另一个对象或者一段字符串。
	//cout << str3 <<" 尾巴拼接"<<endl;

	//str4.append(2, 'c');
	//cout << str4 <<" 尾巴插入n个字符"<<endl;

	str4.append(str3, 1, 2);//"str4.append(*str,i,n) 拼接str字符串第i个位置以后的n个字符 "
	cout << str4 << " 尾巴插入另一对象的一段"<<endl;

}

void Other_string()//其他函数
{

	string str("abcde");
	string str1("qwert");
	string str2("cde");


	cout << str.empty() <<" 判空"<< endl;

	cout << (str1 > str) << " 比较"<<endl;

	cout << str.compare(str1) <<" 对象/(对象和字符串)比较"<< endl;
	//可以将str1换做一段字符串">返回正值(为多出的元素个数);=返回0;<返回-1。"

	//str.compare(i,j,str1) str的从第i个字符开始,后面j个与str1比较 
	cout << str.compare(2, 3, str1, 2, 3)<<" 本对象一段与另一对象一段比较"<<endl;//参数4与5省略后为比较本对象与另一对象的一段。

	char a[6] = { 0 };
	str.copy(a, 2, 3);
	cout <<a<<" 将对象的一段复制给一个字符数组"<< endl;

	cout << str.find(str2, 0)<<" 查找子串/(字符串)/(字符)"<<endl;
	//找到返回起始下标,找不到返回-1(以补码显示)。可以将参数1换做一段字符串(或一个字符),函数变为查找字符串(字符)
	//不存在则返回 string::npos。
	
	cout << str.substr(2, 4) << " 字符串截取"<<endl;

	cout << (str + str1) << " 加法运算" << endl;

	str.swap(str1);
	cout << str << " 对象交换" << endl;;


}

void Print()
{
	cout << "------------------------------------------------------------------------------------" << endl << endl;
}
int main()
{
	Print();
	Constructor_string();//string构造
	Print();
	Attribute_string();//string属性
	Print();
	Output_string();//string输出
	Print();
	Modification_string();//string修改
	Print();
	Other_string();//string其他函数
	Print();
	system("pause");
	return 0;
}

输出结果: