STL string操作

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换做一段字符串(或一个字符),函数变为查找字符串(字符)

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

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

猜你喜欢

转载自blog.csdn.net/weixin_43691058/article/details/87911272
今日推荐