当前位置: 首页 > news >正文

C++【string类】(一)

string类

  • 1.为什么要学string?
  • 2.标准库类型的string类
    • 2.1 string类的构造
    • 2.2string类的析构
    • 2.3读写string类
    • 2.4string类的赋值重载
    • 2.5string的遍历

1.为什么要学string?

在C语言中字符出串是以‘/0’结尾的一些字符的结合,为了操作方便,C标准库中提供了一些str类库函数,但是这些库函数与字符串时分隔开的,不符合OOP(面向对象编程)的思想,并且底层空间需要用户自己管理,可能会越界访问。

2.标准库类型的string类

标准库类型string表示可变长的字符序列,使用string类型必须包含string头文件。作为标准库的一部分,string定义在命名空间std中。

#include<string>
using namespace std;

2.1 string类的构造

  • string类的构造

在这里插入图片描述
string常见的构造

#include<iostream>
#include<string>
using namespace std;
//class string
//{
//	char* _str;
//	size_t _size;
//	size_t _capaicty;
//};//底层实现
int main()
{
	string s1;                  //无参的构造
	string s2("hello wrold");   //带参的构造
	string s3 = "hello world";  //带参的构造
	string s4(s3);              //拷贝构造
	string s5(10, '#');         //多个字符构造
	return 0;
}

2.2string类的析构

在这里插入图片描述
string类的析构出了作用域自动调用,把string内的资源进行释放。

2.3读写string类

#include<iostream>
#include<string>
using namespace std;

int main()
{
	string s;           //空字符串
	cin >> s;           //将string对象读入s
	cout << s << endl;  //输出s
	return 0;
}

2.4string类的赋值重载

在这里插入图片描述

#include <iostream>
#include <string>

int main()
{
	std::string str1, str2, str3;
	str1 = "Test string: ";   // c-string
	str2 = 'x';               // single character
	str3 = str1 + str2;       // string

	std::cout << str3 << '\n';
	return 0;
}

2.5string的遍历

在这里插入图片描述

#include<iostream>
#include<string>
#include<vector>
#include<list>
using namespace std;
void test_string()
{
	string s1("hello world");
	s1[0]++;
	cout << s1 << endl;

	s1[0] = 'x';
	cout << s1 << endl;

	// 遍历1
	// 下标+[]
	for (size_t i = 0; i < s1.size(); i++)
	{
		s1[i]++;
	}
	cout << s1 << endl;

	for (size_t i = 0; i < s1.size(); i++)
	{
		cout << s1[i] << " ";
	}
	cout << endl;
	cout << s1.size() << endl;
	//遍历2
	//迭代器
	string::iterator it = s1.begin();
	while (it != s1.end())
	{
		(*it)--;
		++it;
	}
	cout << endl;

	it = s1.begin();
	while (it != s1.end())
	{
		cout << *it << " ";
		++it;
	}
	cout << endl;

}
void test_string2()
{
	string s("hello world");
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);

	list<int> lt;
	lt.push_back(10);
	lt.push_back(20);
	lt.push_back(30);
	lt.push_back(40);

	reverse(s.begin(), s.end());
	reverse(v.begin(), v.end());
	reverse(lt.begin(), lt.end());
	for (auto& e : s)
	{
		e--;
	}

	//for (auto e : s)
	for (char e : s)
	{
		cout << e << " ";
	}
	cout << endl;

	char x = 'a';

	// for (auto x : v)
	for (int x : v)
	{
		cout << x << " ";
	}
	cout << endl;

	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;

}

int main() 
{
	return 0;
}

相关文章:

  • C语言关键字
  • 认识 Linux 内存构成:Linux 内存调优之虚拟内存与物理内存
  • DAY 39 leetcode 18--哈希表.四数之和
  • 支持企业知识库和联网搜索,360AI企业知识库驱动业务深度融合
  • 小刚说C语言刷题——第19讲 循环之continue和break
  • 计算机网络(1)
  • 【SpringCloud】从入门到精通(上)
  • GPT-SoVITS Windows 配置与推理笔记(自用)
  • JVM虚拟机篇(六):深入理解Java垃圾回收机制
  • 有反驳的意思的英语单词
  • Python----概率论与统计(概率论,互斥事件和概率和,非互斥事件和概率和,独立性事件,生日问题,条件概率)
  • ARM内核与寄存器
  • java 洛谷题单【数学1】基础数学问题
  • 一款基于 .NET 8 + Vue 开源的、企业级中后台权限管理系统
  • 设计模式 Day 6:深入讲透观察者模式(真实场景 + 回调机制 + 高级理解)
  • Every ending plants the seed for a new beginning.
  • 【记录:重装win11内存占用高的问题】
  • React 第三十节 使用 useState 和 useEffect Hook实现购物车
  • 蓝桥杯真题:英文字母
  • PHP 阿里云oss 使用指南
  • 莱芜今日信息广告平台/清远seo
  • 广州动态网站开发/写软文的app
  • 怎么做伪静态网站/自动app优化下载
  • 农产品网站的品牌建设/佛山网站建设方案咨询
  • 烟台网站的建设/百度 营销怎么收费
  • 中国制造网 做网站费用/河北网络推广技术