C++总结篇(3)String类

string是表示字符串的字符串类,该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator> string。不能操作多字节或者变长字符的序列。 在使用string类时,必须包含#include头文件以及using namespace std标准空间。

1.常见string类容量操作接口:

  1. size():返回字符串的有效长度
  2. size():length():返回字符串的有效长度,作用于size()相同
  3. capacity(): 返回空间总大小
  4. empty(): 检测字符串释放为空串,是返回true,否则返回false
  5. clear(): 清空有效字符
  6. resize(n):将有效字符的个数该成n个

如例:

void test(string &s)
{cout << s.size() << endl;  //字符串的有效长度cout << s.length() << endl;//字符串的有效长度cout << s.capacity() << endl;//空间的总大小cout << s.empty() << endl;//检测字符串是否为空串,是则返回true,反之返回falsecout << s << endl;cout << endl;s.resize(3);//将字符串的有限个数改为3个cout << s.size() << endl;cout << s.length() << endl;cout << s.capacity() << endl;cout << s << endl;cout << endl;s.clear();//清空字符串cout << s.empty() << endl;cout << s << endl;
}

2.String类对象访问及遍历操作:

  1. operator[]:返回pos位置的字符,const string类对象调用
  2. begin+ end:begin获取第一个字符的迭代器+ end获取最后一个字符下一个位置的迭代器(从前往后打印)
  3. rbegin + rend:begin获取最后一个字符的迭代器 + end获取第一个字符钱啊一个位置的迭代器(从后往前打印)

如例:

void test(string &s)
{cout << s.operator[](0) << endl;//返回位置0处的字符string::iterator it = s.begin();//获取第一个字符的迭代器while (it != s.end())//直到与最后一个字符下一位置的迭代器相等则跳出循环{cout << *it << endl;it++;}string::reverse_iterator rit = s.rbegin(); //可抽象理解为获取第一个字符的迭代器while (rit != s.rend())//可抽象理解为直到与最后一个字符下一位置的迭代器相等则跳出循环{cout << *rit << endl;rit++;}}

3.String类对象修改操作:

  1. push_back(‘c’): 在字符串后尾插字符c
  2. append(“world”): 在字符串后追加一个字符串
  3. operator+=(str): 在字符串后追加字符串str c_str(): 返回C格式字符串
  4. find(‘c’,pos):从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置
  5. rfind(‘c’,pos):从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置
  6. substr(pos,n):在str中从pos位置开始,截取n个字符,然后将其返回

如例:

void test(string &s)
{s.push_back('c');//尾插一个字符'c'cout << s << endl;s.pop_back();//尾删一个字符cout << s << endl;s.append(" world");//在字符串后追加一个字符串" world"cout << s << endl;char str[] = "!!!";s.operator+=(str);//在字符串后追加一个字符串strcout << s.c_str()<<endl;//以c格式打印字符串cout << s.find('o', 5)<<endl;//从位置5处向后查找字符'o'并返回其位置cout << s.rfind('o', 5) << endl;//从位置5处向前查找字符'o'并返回其位置cout << s.substr(0, 5)<<endl;//截取位置0到位置5处的字符串
}

4.string模拟实现

class String
{
public:String(const char *str){if (str == nullptr){return;}_str = new char[strlen(str) + 1];strcpy(_str, str);}String(const String &str):_str(new char[strlen(str._str)+1]){strcpy(_str, str._str);}~String(){if (_str){delete[] _str;_str = nullptr;}}
private:char *_str;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

memoryTraining记忆训练小游戏

无聊的时候用C写了一个记忆训练的小游戏、、、 灵感源于一个flash的小游戏学到C语言就用C语言实验了一下&#xff0c;做出来。好久以前的东西了&#xff0c;数组用的还不咋样&#xff0c;现在看看把数组下标0漏掉了、、、掉了修补了修补&#xff0c;先扔这儿吧。源码下载

动态调用动态库方法 .so

2019独角兽企业重金招聘Python工程师标准>>> 关于动态调用动态库方法说明 一、 动态库概述 1、 动态库的概念 日常编程中&#xff0c;常有一些函数不需要进行编译或者可以在多个文件中使用&#xff08;如数据库输入/输 出操作或屏幕控制等标准任务函数&#…

C++总结篇(5)vector

vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0c;而且它的大小会被容器自…

清除缓存 c语言_如何用C语言设置,清除和切换单个位?

清除缓存 c语言Given a number and we have to 1) set a bit, 2) clear a bit and 3) toggle a bit. 给定一个数字&#xff0c;我们必须1)设置一个位&#xff0c;2)清除一个位&#xff0c;3)切换一个位。 1)设置一点 (1) Setting a bit) To set a particular bit of a number,…

算法图解:如何找出栈中的最小值?

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;前面我们学习了很多关于栈的知识&#xff0c;比如《动图演示&#xff1a;手撸堆栈的两种实现方法&#xff01;》和《JDK 竟然…

数据库概况

New Words & Expressions:facilitate 使容易&#xff0c;促进retrieval n. 检索field n. 字段record 记录&#xff0c;alphabetically 按字母顺序地chronologically 按年代顺序排break down v. 分解build up 建造&#xff0c;装配&#xff0c;组成encyclopedia n. 百科全书…

30岁之前需要知道的10个人生底线,你知道几个?

http://blog.csdn.net/wojiushiwo987/article/details/8893302 引导语&#xff1a;现在的这些年轻人&#xff0c;你是否考虑过你人生成长发展风向与目标&#xff0c;一旦追求和愿望受阻后&#xff0c;你会如何思考对应&#xff0c;分析其原因的所在&#xff0c;你该如何面对去做…

用C语言设置程序开机自启动

当需要使某一程序在开机时就启动它&#xff0c;需要把它写进注册表的启动项中。 下面就展示一种简单的写法&#xff1a; #include <windows.h> #include <stdlib.h> #include <stdio.h>void ComputerStart(char *pathName) {//找到系统的启动项 char *szSub…

漫画:什么是布隆算法?

两周之前——爬虫的原理就不细说了&#xff0c;无非是通过种子URL来顺藤摸瓜&#xff0c;爬取出网站关联的所有的子网页&#xff0c;存入自己的网页库当中。但是&#xff0c;这其中涉及到一个小小的问题......URL去重方案第一版&#xff1a;HashSet创建一个HashSet集合&#xf…

kotlin 字符串_Kotlin程序确定字符串是否具有所有唯一字符

kotlin 字符串Given a string, we have to check whether it has all unique characters or not. 给定一个字符串&#xff0c;我们必须检查它是否具有所有唯一字符。 Example: 例&#xff1a; Input:string "includehelp"Output:falseInput:string "abcd&qu…

css优先级机制说明

首先说明下样式的优先级,样式有三种&#xff1a; 1. 外部样式&#xff08;External style sheet&#xff09; 示例&#xff1a; <!-- 外部样式 bootstrap.min.css --><link href"css/bootstrap.min.css" rel"stylesheet" type"text/css"…

制作一个钟表

用EasyX制作的一个简易钟表&#xff0c;需设置字符集属性为多字节字符集。效果如下所示&#xff1a; GIF图会有些闪动&#xff0c;在实际中这种闪动几乎不可见。 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<graphics.h> #include<math.h…

趣谈MySQL历史,以及MariaDB初体验

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;MySQL 是一个跨世纪的伟大产品&#xff0c;它最早诞生于 1979 年&#xff0c;距今已经有 40 多年的历史了&#xff0c;而如今…

网页设置页数/总页数_图书分配问题(分配最小页数)

网页设置页数/总页数Problem statement: 问题陈述&#xff1a; Given an array of integers A of size N and an integer B. College library has N bags, the ith book has A[i] number of pages. 给定一个大小为N的整数A和一个整数B的数组。 高校图书馆有N个书包&#xff0c…

算法图解:如何判断括号是否有效?

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;今天要讲的这道题是 bilibili 今年的笔试真题&#xff0c;也是一道关于栈的经典面试题。经过前面文章的学习&#xff0c;我想…

让人省心的事件委托

事件委托:利用冒泡的原理把实践添加到父元素级别上&#xff0c;触发执行效果。 时间委托优点&#xff1a; 1.提高性能&#xff0c;不用for循环遍历所有li&#xff0c;节省性能。 2.新添加的元素还会有原来之前的事件。 先看时间委托提高的性能吧&#xff0c;一个常…

Python HTMLCalendar类| 带有示例的formatyearpage()方法

Python HTMLCalendar.formatyearpage()方法 (Python HTMLCalendar.formatyearpage() Method) formatyearpage() method is an inbuilt method of the HTMLCalendar class of calendar module in Python. It works on HTMLCalendar class object and returns a years calendar a…

最新版MySQL在MacOS上的实践!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;在 MacOS 上安装最新版的 MySQL 有三种方法&#xff1a;使用 Docker 安装&#xff1b;使用 Homebrew 运行 brew install mys…

二进制文件的操作

所有文件的存储其实质都是二进制的&#xff0c;二进制文件往往由两部分组成&#xff0c;一部分是文件头另一部分存放了文件的内容。文件头通常存放与文件格式有关的信息&#xff0c;以BMP等图象文件为例&#xff0c;它们的文件头中存放了是何种图形格式、图象大小、调色板等信息…

【转】GitHub入门详细讲解

第一&#xff1a;请登录https://windows.github.com/ 下载您需要的安装软件&#xff0c;进行安装。安装后桌面有&#xff1a;GitHub 和 Git Shell 第二&#xff1a; 申请一个帐号https://github.com/signup/free 帐号名字要记得清楚。 其他请参考 http://www.woiweb.net/github…