C++---string用法

本文详细介绍了C++中string类型的定义与初始化,包括使用getline处理空格,字符串拼接,以及各种遍历方法如for、迭代器、反向迭代器和范围for。还涵盖了取字符、函数如size(),clear(),reserve()等的用法。
摘要由CSDN通过智能技术生成


一、string类型定义,初始化

在这里插入图片描述

如图,s1,s2,s3均为定义方法,但在输入字符串时若有空格不能直接cin,否则后面内容不会读入这里我们使用getline去读

在这里插入图片描述

在这里插入图片描述

这里可以看见getline的功能

二、字符串的拼接

比如这里我们想把s1和s2拼接

	string s1 = "hello";
	string s2("world");
	cout << s1 + s2 << endl;

在这里插入图片描述

三、遍历string

1.普通for循环

	string s1 = "abcdefg";
	for (size_t i = 0; i < s1.size(); i++)
		cout << s1[i] << " ";
	cout << endl;
	for (size_t i = 0; i < s1.size(); i++)
		s1[i]++;
	cout << s1;

在这里插入图片描述

2.迭代器遍历

	string s1 = "abcdefg";
	string::iterator it = s1.begin();
	while (it != s1.end())
	{
		//读
		cout << *it << "  ";
		++it;
	}
	cout << endl;
	it = s1.begin();
	while (it != s1.end())
	{
		//写
		*it = 'a';
		++it;
	}
	cout << s1;

在这里插入图片描述

3.反向迭代器遍历

string s1 = "abcdefg";
	string::reverse_iterator it = s1.rbegin();//此类型也可以换成auto
	while (it != s1.rend())
	{
		cout << *it << " ";
		++it;
	}
	cout << endl;

在这里插入图片描述

4.范围for遍历

string s1 = "abcdefg";
	for (auto ch : s1)
	{
		//读
		cout << ch << " ";
	}
	cout << endl;
	for (auto ch : s1)
	{
		//写
		ch++;
		cout << ch << " ";
	}

在这里插入图片描述

5.四种迭代器

正向迭代器 const
反向迭代器 非const
正向迭代器:string::iterator it(指针)
反向迭代器:string::reverse_iterator rit(指针)

四、取字符

string s1("hello,world");
	string s2(s1);
	cout << "s2:" << s2 << endl;
	string s3(s1, 6, 5);
	cout << "s3:" << s3 << endl;
	string s4(s1, 5);
	cout << "s4:" << s4 << endl;

在这里插入图片描述

仔细观察s4,发现比s3少传了个参数,那是因为那个参数有一个缺省值npos=-1,但他是无符号整形,所以也就是42亿多,这不是超范围了吗?但是祖师爷明显想到了这点,当s.size()小于npos的时候,就会取到s结束,但想取到最后一个,还可以采用下面方法

string s5(s,6,s.size()-6);

五、有关string的函数

//1.s.size()//求s的长度
//2.s.clear()//清理数据,但不主动释放空间
//3.s.capacity()//扩容


在这里插入图片描述

//4.reverse 反转
//5.reserve 保留
s.reserve(100);//保留100个空间,vs可能会比100多一点,g++会给100
//6.resize  size大小
//关于resize有下面声明方式
resize(size_t n);
resize(size_t n,char ch);
//若n>s.capacity(),那就是扩容
//若n>s.size()&&n<s.capacity(),那就是插入
//若n<s.size(),那就是删除

在这里插入图片描述

//7.push_back();尾插
//8.(operator+=)+= 拼接
//9.assign  赋值,可覆盖原来内容
//10.insert  插入
//11.erase   删除

在这里插入图片描述

//12.find,rfind 从前面,后面查找
//13.substr 分段
string s = "hello";
	cout << s.find('h') << endl;
	cout << s.rfind('e') << endl;
	string s1;
	s1 = s.substr(0, 2);
	cout << s1;

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值