C++学习笔记 lesson9 C++ string类

STL可变长字符串类

#include<string.h> //c 语言的字符串操作
#include<cstring>  // 符合 c++标准 字符串操作
#include<string>//c++  STL可变长字符串类
#include<iostream>
using std::string;


template<typename T>//不同的数据类型在反汇编中自动生成不同的地址
void Swap(T& lhs, T&rhs)
{
	T temp;
	temp = lhs;
	lhs = rhs;
	rhs = temp;
}
int main()
{
	//std::wstring wstr; //宽字节 存放unicode     wchar_t  2byte
	//string str;        //窄字节  字节上大小不同  char     1byte

	string str("123456789", 3);// 取前三个出来
	std::cout << str << std::endl; 
	string str1(10, 'A');// 把字符复制10次
	string str2(str, 3); // 456789 从第3+1个元素开始取
				//位置  长度
	string str3(str, 3, 3);// 789  
	string str4("123455", 3, 3);//456  从[3]开始取3个
	//===>   产生临时对象string(char*)temp
		   //string(string,1,2) 
	string str5("123455", 3); //取前三个

	//长度操作
	string str6;//使用的默认构造,传递的是一个空字符串
	str6.size(); //  0  返回当前string的length
	str6.length();// 0   返回当前string的length 和size一样
	str6.empty();// 1 
	str6.max_size();
	str6.capacity();
	str6.resize(100, 'a');//填充a

	//查找
	string str7("12345678");
	std::size_t pos = str7.find('1');// 全匹配 返回一个size_t的对象 查到返回第一次的当前下标,
									//查不到返回  std::string::npos(不要使用-1)
	std::size_t pos1 = str7.find("12", 4);// 第二个参数是开始查找的位置
	std::size_t pos2 = str7.find("123434", 4, 4); //第三个参数是待查找字符串的前几个
	str7.rfind('8');//和find一样,查找的顺序是从尾部开始查
	str.find_first_of('8');//查找第一个
	str.find_last_of('8');//查找最后一个
	str.find_first_not_of('8');//查找第一个不是这个串里任何一个字符的值的位置

	//Emp 查找出数字串
	string strl("asdcerx  012324984 edhfvld");
	std::size_t pos_begin = strl.find_first_of("1234567890");
	std::size_t pos_end = strl.find_first_not_of("1234567890", pos_begin);
	string num(strl.begin() + pos_begin, strl.begin() + pos_end);

	//比较 和c语言 strcmp 一样
	int pos = pos_begin;
	int len = num.size();
	std::cout << (strl.compare(pos, len, num) == 0) << std::endl;

	//截取
	string num = (strl.substr(pos_begin, pos_end - pos_begin));
	//交换
	num.swap(strl);
	//拼接
	num += 100;//不能接浮点数,整数会被转成char型,接char和字符串才能直接拼接在后面
	num.append(10, 'M');//在后面拼接10个M
	//访问
	num[4];//如果下标越界 抛出系统异常,不能try catch
	num.at(4);//如果下标越界 抛出能处理的异常
	//c风格字符串转换
	//strlen(num); 没有重载 operator char*()
	strlen(num.c_str());//c_str 返回const char*

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值