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;
};

C++总结篇(3)String类相关推荐

  1. 【JAVA基础篇】String类详解

    昨天参加了一场机试,发现自己居然对String类的api不熟了,所以今天来总结一下(基于JDK1.8). 1.父类和实现的接口 没有父类,或者说父类是Object 接口:Serializable.Co ...

  2. 常量池在堆还是方法区_详解Java 虚拟机(第③篇)——String 类和常量池

    一.String 对象的两种创建方式 String str1 = "abcd"; String str2 = new String("abcd"); Syste ...

  3. java实现linkstring,【JAVA SE基础篇】32.String类入门

    [JAVA SE基础篇]32.String类入门 1.字符串 1.String类又称作不可变字符序列 2.String位于java.lang包中,java程序默认导入java.lang包下所有的类 3 ...

  4. Java基础篇(02):特殊的String类,和相关扩展API

    本文源码:GitHub·点这里 || GitEE·点这里 一.String类简介 1.基础简介 字符串是一个特殊的数据类型,属于引用类型.String类在Java中使用关键字final修饰,所以这个类 ...

  5. java unicode32_【JAVA SE基础篇】32.String类入门

    1.字符串 1.String类又称作不可变字符序列 2.String位于java.lang包中,java程序默认导入java.lang包下所有的类 3.java字符串就是Unicode字符序列,例如字 ...

  6. Java基础篇:去探索String类

    今天对String做一个简单的探索. String类是Java类库中最常用的类,其中最明显的原因是字符串在编程语言中是很重要的部分. 有关字符串的最重要一点是,你创建的每一个字符串实际上都是Strin ...

  7. 黑马程序员——Java String类 and 正则表达式(第七篇)

    -----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 虽然老毕视频中把正则表达式放到了最后面才讲,但个人认为他和String功能上有些 ...

  8. 学习String类和日期Date类,看这一篇就够了

    写在前面,Java基础系列文章都是作者基于b站尚硅谷的Java基础视频所做的笔记,没有时间的同学可以认真看看,如果有时间的同学,还是建议看看视频,毕竟笔记说到底还是自己的东西,每个人的习惯也是不一样的 ...

  9. 带你进入String类的易错点和底层本质分析!

    来源:https://my.oschina.net/liboware/blog/5076245 字符串拼接及创建的案例分析 案例一 String a = "test"; Strin ...

最新文章

  1. Linux下修改Mysql的用户(root)的密码
  2. ipp 实现图像空间的转换
  3. 【Android 高性能音频】Oboe 开发流程 ( Oboe 完整代码示例 )
  4. html版本的网站地图只适合,如何在HTML和XML网站地图中取舍
  5. MySQL分组函数和distinct搭配使用
  6. 2021 年最值得学习的 5 大机器学习编程语言!
  7. java 大数操作(加减乘除及取余)
  8. MySQL数据库:索引+事务+JDBC
  9. 特斯拉Model Y发布,售价3.9万美元起,马斯克:年底实现全自动驾驶
  10. poi 操作excel的处理
  11. 华为存储IE证书挂靠
  12. AUTOCAD——弧形文字排列
  13. python math 数学函数教程
  14. 单变量微积分笔记28——不定式和洛必达法则
  15. logback出现大量XXX_IS_UNDEFINED日志文件的问题
  16. 六石管理学:突然看到两个男同事聊天,预判离职
  17. 深度学习图像标注软件LabelMe使用方法
  18. 数据预处理之数据合并(基于pandas)
  19. 成都学python哪个机构好_成都学python人工智能哪个机构好
  20. 王道论坛《计算机网络》网课学习笔记

热门文章

  1. JMS(Java消息服务)与消息队列ActiveMQ基本使用(一)
  2. zabbix企业应用之监控docker容器资源情况
  3. ProFTPD 初探
  4. BJRangeSliderWithProgress
  5. 随想系列_4_从电影《可可西里》说起
  6. HDU-3460 Ancient Printer 字典树
  7. 启动TOMCAT报错 java.util.zip.ZipException: invalid LOC header (bad signature)
  8. 隐藏域input里面放当前时间_【小A问答】Win10的隐藏小秘密,被我发现了!
  9. linux中断处理模式,Linux在保护模式下的中断处理分析.pdf
  10. 位运算使奇数+1 偶数-1_C ++程序打印从1到N的所有偶数和奇数