c++学习:STL之string类初识

这篇具有很好参考价值的文章主要介绍了c++学习:STL之string类初识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.关于STL

1.什么是STL

2.STL的六的组件

2.关于string类的学习

1.为何学习string类

2.何为string类

3.string类对象的构造

4.容量操作

 5.元素访问的操作

6.迭代器(Iterators)

7.修改类的操作

 8.字符串操作


1.关于STL

1.什么是STL

STL(standard template library-标准模板库):是c++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包含数据结构预算法的软件框架。

在STL中有常用的数据结构以及其他算法等标准模板提供使用,其中接口非常丰富。

2.STL的六的组件

如图:

c++学习:STL之string类初识

 其中迭代器,算法,容器这几大组件非常重要,可以看到在其中有我们认识一些算法swap,find,reverse,配接器中的stack,以及今天来学习的的容器中的string。

2.关于string类的学习

1.为何学习string类

在c语言中我们面对字符串有专门的对字符串操作的库函数string.h,而对于c++,沿用c语言的这种方式显然不符合面向对象的思想,并且其中功能并不全面,我们有时候需要自己实现一些函数,且对于字符串我们都是它是以\0结尾的。

于是在c++中引入了string类:

string类是一个字符串类,区别于c语言中的字符串定义,在c++中创建定义字符串有两种方式:

一种是c风格字符串:

所谓C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。字符串实际上是使用 null 字符 \0 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。

第二种就是c++引入的string类:

c++ string库中定义了string类提供使用者方便定义字符串以及对字符串的一些操作,这是c++特有的一种方式。

2.何为string类

string类是一个模板类,其类的对象是字符串。

string类就是一个字符串类,该类的接口与常规的容器的接口基本相同,另外添加了一些专门用于操作string的常规操作。

c++学习:STL之string类初识

c++学习:STL之string类初识

其中类中成员函数,迭代器,容量,元素访问,字符串操作,成员常量,非成员函数重载c++中都详细的给出了定义,见字符串 - C++引用 (cplusplus.com)

可以看到string类中有着丰富的功能,对于我们该做到熟练地使用string类。

3.string类对象的构造

在c++中给出了七中不同情况下的构造函数。

c++学习:STL之string类初识

 这里给出一般常用的对象的构造:

int main()
{
	string s1;//空字符串构造,默认为空
	cout << s1 << endl;
	string s2("hello world\n");//const string& str  常字符型
	cout << s2 << endl;
	string s3(s2);//拷贝构造
	cout << s3 << endl;
    string s4("hello world",0,5)//截取构造0到5
   cout << s4 << endl;
}

4.容量操作

可以看到对于字符串的一些容量接口

c++学习:STL之string类初识

 这里还是介绍常用的:

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str("hello world");
	cout << str.size() << endl;//计算字符串大小
	cout << str.length() << endl;//计算字符串长度,包括\0
	cout << str.capacity() << endl;//计算申请空间大小
	str.reserve(100);//预设100个空间,加上本来的
	cout << str.capacity() << endl;
	str.resize(100);//改变字符串大小
	cout << str.size() << endl;
}

 5.元素访问的操作

访问的一些操作如下:

c++学习:STL之string类初识

 注意这里的[ ],这里是重载了[ ],以便它能访问类里的字符串,且为常量字符串(一般我们初始化对象时为常量字符串),一般定义在类里面,这里也只对[ ]介绍一下:

int main()
{
	string str("hello world");
	for (int i = 0; i < str.size(); i++)
	{
		cout << str[i] ;
	}
	cout << endl;
	//利用[]访问常量字符串中的每个元素
	//因为在重载时是利用了引用,因此这里还可以修改
	str[1] = 'w';
	cout << str[1];
	//当然在定义string的对象时,对于const 修饰的类型是无法被修改的
	const string str1("hello world");
	//str1[1] = 'w';  报错
}

6.迭代器(Iterators)

对于所有的STL中都会有一个迭代器,在这里你可以将迭代器理解为一个变量或者指针,因为要访问顺序容器和关联容器的元素,我们就用迭代器来遍历,读取,它是做为一个媒介,可以指向容器中的某个元素,类似指针的指向。

c++学习:STL之string类初识

 这里我们浅浅说一下

int main()
{
	string str("hello world");
	//可以类似定义一个迭代器(可理解为指针)指向容器中的某个元素
	string::iterator i = str.begin();//指向开始的元素
	while (i!=str.end())
	{
		*i = ' x';//当然我们也可以修改迭代器中所保存指向的元素
		cout << *i;
		i++;
	}
	cout << endl;
}

7.修改类的操作

c++学习:STL之string类初识

可以看到有很多修改操作,这里也展示一些常用的:

int main()
{
	//push_back  追加一个字符
	string s1("hello world");
	s1.push_back('!');
	cout << s1 << endl;
	//append   追加一个字符串
	s1.append(" haha");
	cout << s1 << endl;
 	//operator+=,重载了+=,作用是追加,这里给了两种函数接口,是综合了前两种的追加
	//操作是两个对象
    //insert   插入
	s1.insert(5, "hello");//在第五个位置处插入
	cout << s1 << endl;
	//c_str  返回字符数组的一个指针,返回类型为const char *
	const char* ch;
	ch = s1.c_str();
	cout << *ch<<endl;

}

c++学习:STL之string类初识

 8.字符串操作

c++学习:STL之string类初识

这里简单介绍常用的:

int main()
{
	string s1("hello world");
	string s2("hello");
	//查找 find,其返回类型为整形,若查找到了,返回与匹配项相同的第一个字符的位置,否则返回string::npos(一个无符号整型)
	if (s1.find(s2) != string ::npos)
	{
		cout << s2 << "存在于" << s1 << endl;
	}
	else
	{
		cout << s2 << "不存在于" << s1 << endl;
	}
	//这里也可以从给的索引位置查找
	//s1.find(s2,5) != string ::npos 从s2的第五个开始查找、
	//可查找字符,或字符串

	//rfind  从后面往前查找,找到返回位置
	string filename("test.txt.tar.zip");
	size_t pos = filename.rfind(".");
	//substr  取一段子字符串 即截取
	string suffix = filename.substr(pos);//pos处开始截取
	cout << suffix;
}

c++学习:STL之string类初识

 文章来源地址https://www.toymoban.com/news/detail-435308.html

到了这里,关于c++学习:STL之string类初识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第一百一十五天学习记录:C++提高:STL初识(黑马教学视频)

    1、长久以来,软件界一直希望建立一种可重复利用的东西 2、C++的面向对象和泛型编程思想,目的就是重复性的提升 3、大多数情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作 4、为了建立数据结构和算法的一套标准,诞生了STL 1、STL,标准模板库 2、

    2024年02月16日
    浏览(44)
  • 第一百一十六天学习记录:C++提高:STL-string(黑马教学视频)

    string是C++风格的字符串,而string本质上是一个类 string和char 区别 1、char 是一个指针 2、string是一个类,类内部封装了char*,管理这个字符串,是一个char 型的容器。 特点: string类内部封装了很多成员方法 例如:查找find,拷贝copy,删除delete替换replace,插入insert string管理char

    2024年02月15日
    浏览(44)
  • 【C++】STL初识

    2024年02月13日
    浏览(30)
  • 【c++】STL--string

            最开始我们学习c语言的时候,我们发现刷题或者写代码都是比较麻烦的,如果说用c语言造一辆车,那么我需要用c语言先把轮子造好--各个零件,当我们造好之后再组装。那么c++则是造好了轮子,只需要我们组装就好了。这里的的STL里有各个组件,我只要熟悉的掌握

    2024年02月03日
    浏览(45)
  • C++ STL string类

    目录 一.为什么学习string类 (1) C语言中的字符串 (2)标准库里面的string类 二. string类的常用接口说明 (1)string类对象的常见构造 (2)string类对象的容量操作 1.size(),length(). 2. capacity() 3.empty()  4.clear()  5.reserve()  6.resize() (3)string类对象的访问及遍历操作  1.operator[ pos

    2024年02月13日
    浏览(35)
  • 【C++】STL——string类详解

    🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛸C++  🛹Linux 📕 学习格言:博观而约取,厚积而薄发 🌹 欢迎进来的小伙伴,如果小伙伴们在学习的过程中,发现有需要纠正的地方,烦请指正,希望能够与诸君一同

    2024年02月11日
    浏览(41)
  • 【C++】STL之string类(2)

    个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C++之路】💌 本专栏旨在记录C++的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长,共同进步。🍓 reverse :在不改变字符串内容的前提下,预留一定的

    2024年02月12日
    浏览(35)
  • 【C++ • STL】探究string的源码

    ヾ(๑╹◡╹)ノ\\\" 人总要为过去的懒惰而付出代价 ヾ(๑╹◡╹)ノ\\\" 浅拷贝 :也称位拷贝,编译器只是将对象中的值拷贝过来。如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,

    2024年02月08日
    浏览(40)
  • C++ [STL之string模拟实现]

    本文已收录至《C++语言》专栏! 作者:ARMCSKGT 前面我们介绍了STL容器string的部分接口使用,有了string使我们对字符串的操作如鱼得水,其实string不止于使用方便,其实现也有许多我们值得学习的地方,本节将为您介绍string常用接口的代码实现! 本文接口的实现借助于C++官方

    2024年02月05日
    浏览(48)
  • 【C++精华铺】9.STL string

    目录 1. string类的优势 2. string类的常用接口 2.1 常用构造 1. 空串构造:string(); 2. C串构造:string(const char* s); 3. 拷贝构造:string(const string str); 4. 字符填充构造:string(size_t n, char c); 5. 迭代器构造:string(InputIterator first, InputIterator last); 2.2  string容量操作 1. size_t size(),size_t length

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包