1. 基础概念

    • 对照功能列表:不能直接回答的再去看相应解析说明。

      begin 得到指向字符串开头的 Iterator

      end 得到指向字符串结尾的 Iterator

      rbegin 得到指向反向字符串开头的 Iterator

      rend 得到指向反向字符串结尾的 Iterator

      sizeof

      size 得到字符串的大小

      length 和 size 函数功能相同

      strlen

      max_size 字符串可能的最大大小

      capacity 在不重新分配内存的情况下,字符串可能的大小

      reserve 预留空间

      resize 重新分配空间

      empty 判断是否为空

      operator [] 取第几个元素,相当于数组

      c_str 取得 C 风格的 const char* 字符串

      data 取得字符串内容地址

      operator= 赋值操作符

      swap 交换函数

      insert 插入字符

      append 追加字符

      push_back 追加字符

      erase 删除字符串

      clear 清空字符容器中所有内容

      assign 和赋值操作符一样

      replace 替代

      copy 字符串到空间

      find 查找,返回基于 0 的索引号

      rfind 反向查找

      find_first_of 查找包含子串中的任何字符,返回第一个位置

      find_first_not_of 查找不包含子串中的任何字符,返回第一个位置

      find_last_of 查找包含子串中的任何字符,返回最后一个位置

      find_last_not_of 查找不包含子串中的任何字符,返回最后一个位置

      substr (n1,len) 得到字符串从 n1 开始的长度为 len 的子串

      比较字符串 (支持所有的关系运算符)

      compare 比较字符串

      operator+ 字符串链接

      operator+= += 操作符

      operator== 判断是否相等

      operator!= 判断是否不等于

      operator< 判断是否小于

      operator>> 从输入流中读入字符串

      operator<< 字符串写入输出流

      getline 从输入流中读入

    • string:相对于C语言,C++独有的概念。归属于标准模板库,<string.h>。

    • 字符(串)字面值:用双引号括起来的内容是字符串字面值,用单引号括起来的内容是字符字面值。

    • 大小:实际保存的元素个数 size resize

    • 容量:在不分配更多内存的情况下,可以保存的最多元素个数 capacity reserve

    • sizeof :常考点是sizeof(struct),需要对齐计算。

      sizeof(bool) = 1

      sizeof(char) = 1

      sizeof(string) = 8 32位为4

      sizeof(int) = 4

      sizeof(float) = 4

      sizeof(double) = 8

      sizeof(long) = 8 32位为4

      sizeof(long double) = 16 32位为12

      sizeof(long long) = 8

      sizeof(enum) = 4

      sizeof(int *) = 8 32位为4

      sizeof(char *) = 8 32位为4,指针类型的长度是固定的

  2. 初始化

    string s1; //默认初始化,空字符串

    string s2 = s1; string s2(s1); //s2是s1的副本

    string s3 = "hello"; string s3( "hello" ); //s3是字符串字面值"hello"的副本

    string s4(10, 'c'); //s4是连续10个字符“c”组成的字符串。

    string s5{’a‘,'b'};

  • 使用等号初始化是拷贝初始化,其他是直接初始化。拷贝初始化一般只能用于初始值只有一个的情况。
  1. 查找

    • string1.find(string2, pos, n) 前向搜索特定子串的第一次出现

      • 入参:

        • string2:必需。可以是string/char*/char。
        • pos:非必需。查找的起始位置。
        • n:非必需。待查找string的前n个字符。
      • 返回值:返回string2第一个字符在string1中的位置,如果没找到返回std::string::npos
    • rfind 从尾部开始,后向搜索特定子串的第一次出现

      • 备注:参数与上式类似,只是查找方向从后向前。
    • find_first_of 搜索指定字符集合中任意字符的第一次出现

      • 备注:参数与上式类似,但如果在string1 中查找string2,如果 string1 中含有 string2中的任何字符,则就会查找成功。
    • find_last_of 搜索指定字符集合中任意字符的最后一次出现

    • find_first_not_of 搜索不属于指定字符集合中任意字符的第一次出现

      • 备注:此函数相比查找功能更倾向于比较功能,可与compare联合记忆。
    • find_last_not_of 搜索不属于指定字符集合中任意字符的最后一次出现

  2. 截取与删除

    • string1.substr(size_t pos, n ) 返回从 pos 开始的 n 个字符组成的字符串,string1内容不被改变

      • 入参:

        • pos:必需。截取的起始位置
        • n:非必需。截取的长度,不填表示截取到末尾。常从上面查找中获取。
      • 备注:左闭区间,起始位置是从0开始。
    • string1.erase (size_t pos, n) 删除从pos开始的n个字符组成的字符串,返回被删减后的string1

      • 备注:参数与上类似,只是截取变成删除。
    • string1.erase (iterator p) 删除p处单字符,返回被删减后的string1

      • 备注:p是string类型迭代器,注意与上式单入参时含义的区别。
    • string1.erase (iterator first, iterator last) 删除从first到last区间的字符串,返回被删减后的string1

      • 备注:删除区间为左闭右开,str1.erase(str1.begin(),str1.end()-1)表示保留最后一位字符。
  3. 赋值(赋值的方法太多了,也很基础就简单提一下)

    • string1.assign(string2) string2可以是string或char *

      string1.assign(string2, pos, n) string2可以是string或char *

    • 记录一个特殊的情况(实际也很少有人会这样用),当使用string下标赋值时,需要先保证下标可访问(默认初始化只是空字符串),即需要开辟相应内存空间。

      string a;
      a.resize(3);
      for(int i = 0; i < a.size(); i++)
      a[i] +='a';
  4. 比较(这个大部分是摘抄的,出处找不到了),主要是注意这些命令的适用场景不同

    strcmp (windows/linux)
    原型:int strcmp (char *s1,char * s2);
    功能:比较字符串 s1 和 s2。
    说明:
    当 s1<s2 时,返回值 < 0
    当 s1=s2 时,返回值 = 0
    当 s1>s2 时,返回值 > 0
    举例:
    char *s1="Hello, Programmers!";
    char *s2="Hello, programmers!";
    r=strcmp (s1,s2); //r 小于 0, 参见 ascii 表
    -----------------------------------------------
    stricmp,strcmpi(Windows独有的函数,Linux用strcasecmp)
    原型:int stricmp (char *s1,char * s2);
    功能:比较字符串 s1 和 s2,但不区分字母的大小写。
    说明:strcmpi 是到 stricmp 的宏定义,实际未提供此函数。
    当 s1<s2 时,返回值 < 0
    当 s1=s2 时,返回值 = 0
    当 s1>s2 时,返回值 > 0
    -----------------------------------------------
    strncmp (windows/linux)
    原型:int strcmp (char *s1,char * s2,int n);
    功能:比较字符串 s1 和 s2 的前 n 个字符。
    说明:
    当 s1<s2 时,返回值 < 0
    当 s1=s2 时,返回值 = 0
    当 s1>s2 时,返回值 > 0
    -----------------------------------------------
    strnicmp,strncmpi (Windows独有的函数,Linux用strncasecmp)
    原型:int strnicmp (char *s1,char * s2,int n);
    功能:比较字符串 s1 和 s2 的前 n 个字符但不区分大小写。
    说明:strncmpi 是到 strnicmp 的宏定义
    当 s1<s2 时,返回值 < 0
    当 s1=s2 时,返回值 = 0
    当 s1>s2 时,返回值 > 0
    -----------------------------------------------
  5. 拼接

    • strcat与strncat

      strcat (windows/linux)
      原型:char *strcat (char *dest,char *src);
      功能:把 src 所指字符串添加到 dest 结尾处 (覆盖 dest 结尾处的 '\0') 并添加 '\0'。
      说明:src 和 dest 所指内存区域不可以重叠且 dest 必须有足够的空间来容纳 src 的字符串。
      返回指向 dest 的指针。
      举例:
      char d[20]="Golden Global";
      char *s=" View";
      strcat(d,s);
      ---------------------`--------------------------
      strncat (windows/linux)
      原型:char *strncat (char *dest,char *src,int n);
      功能:把 src 所指字符串的前 n 个字符添加到 dest 结尾处 (覆盖 dest 结尾处的 '\0') 并添加 '\0'。
      说明:src 和 dest 所指内存区域不可以重叠且 dest 必须有足够的空间来容纳 src 的字符串。
      返回指向 dest 的指针。
      -----------------------------------------------
    • append 比较常用,直接上个说明代码即可

      // appending to string
      #include <iostream>
      #include <string> int main ()
      {
      std::string str;
      std::string str2="Writing ";
      std::string str3="print 10 and then 5 more"; // used in the same order as described above:
      str.append(str2); // "Writing "
      str.append(str3,6,3); // "10 "
      str.append("dots are cool",5); // "dots "
      str.append("here: "); // "here: "
      str.append(10u,'.'); // ".........."
      str.append(str3.begin()+8,str3.end()); // " and then 5 more"
      str.append<int>(5,0x2E); // "....." std::cout << str << '\n';
      return 0;
      }
    • push_back(char c)

      • 与append类似,但append只能添加const char,push_back只能加char。
    • +=

      • 常用的方式,但要注意不能两个char直接相加。

        string s;
        char a, b;
        //s = a + b + s; 错误
        s = s + a + b; 正确
  6. 字符数组,字符指针,字符串转换

    • string转char*

      • c_str() 将string转为const char *

        • C语言中没有string,要利用c_str()转化后使用,并且不能对转化后的值做修改(该问题易出现在入参为char*的函数中)
      • data()

        • 与上类似,根据C++reference说明,区别在于c_str()保证最后一个字符是‘\0’,而data()不保证。所以都用c_str()即可。
      • copy(char*s, size_t len, size_t pos = 0) 特别注意这里第二个参数是长度,第三个是起始位置,这和一般情况正相反

        • 该函数不会自动在尾部加'\0',使用时注意手动加上。

          string str="hmmm";
          char p[50];
          str.copy(p, 5, 0);//这里5代表复制几个字符,0代表复制的位置,
          *(p+5)=‘\0’;//注意手动加结束符!!!
    • char* 转 string 直接赋值即可。

    • string 转 char[] 利用length()获取string长度,然后遍历将下标付给char[]即可。

    • char[] 转 string 直接赋值即可。

参考资料:

https://blog.csdn.net/qq_37891604/article/details/79709876

https://blog.csdn.net/cainv89/article/details/47813701

https://www.cnblogs.com/zpcdbky/p/4457123.html

C++ string常见函数总结的更多相关文章

  1. java String部分源码解析

    String类型的成员变量 /** String的属性值 */ private final char value[]; /** The offset is the first index of the ...

  2. oracle 统计语句 与常见函数的归纳(未完待续)

    一.统计语句 1. count count(*)与count(0)语句的区别: count(*)统计所有数量 count(0)统计第一列不为空的 2. 两个统计量的减法 select (select ...

  3. AnsiString和String的区别、使用

    16.C/C++语言在CB中的一些特定用法 2)AnsiString是从Delphi中引进来的吗? 答:CB的核心组件VCL是用Object Pascal语言写出的,所以CB的VCL组件的属性有很多都 ...

  4. stl string 容器的使用

    string 是基本的字符串序列容器,对应数据结构中的串,和vector<char>也类似,但功能更多 string 容器的使用 1,string 的构造函数是. string() 2,s ...

  5. loadrunner——常见函数

    loadrunner——常见函数 分类: LoadRunner 2012-04-11 20:41 703人阅读 评论(0) 收藏 举报 loadrunnersearchweb服务器脚本stringwe ...

  6. BCB:AnsiString和String的区别

    AnsiString和String的区别.使用 本文转自:http://www.bianceng.cn/c/index.htm 16.C/C++语言在CB中的一些特定用法 2)AnsiString是从 ...

  7. 透过WinDBG的视角看String

    摘要 : 最近在博客园里面看到有人在讨论 C# String的一些特性. 大部分情况下是从CODING的角度来讨论String. 本人觉得非常好奇, 在运行时态, String是如何与这些特性联系上的 ...

  8. JavaScript String对象

    本编主要介绍String 字符串对象. 目录 1. 介绍:阐述 String 对象的说明以及定义方式. 2. 实例属性:介绍 String 对象的实例属性: length. 3. 实例方法:介绍 St ...

  9. ElasticSearch 5学习(9)——映射和分析(string类型废弃)

    在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...

随机推荐

  1. node.js报错:Cannot find module 'xxx'的解决办法

    从别处拷贝一份node.js项目,如图 控制台启动 nodemon index.js 后报错:Cannot find module xxx.删除node_modules,在启动时仍提示Cannot f ...

  2. 用MindManager画思维导图的好处有哪些?

    大家都听说过思维导图吧?有没有将这样一种图形思维工具真正运用到我们的日常生活中去呢?是否真的知道思维导图怎么用呢?今天小编就来给大家讲一讲,思维导图怎么用. 老规矩,先给大家讲一讲小编用的软件跟系统, ...

  3. Javascript 严格模式的一些理解

    平常我们在ECMAscript5中可以声明以下的变量 num = 5; console.log(num);//输出的是变量5 而为了Javascript更合理.更安全.更严谨的方向发展,添加了一种新的 ...

  4. 「有数可据」选择IT行业的1000个理由!

    这你要我编 我也编不出一千个呀 现如今转行IT 还需要1000个理由吗? 不 不需要的 一个就好   10月初 CSDN博主「有数可据」 发布了 2020年10月国内程序员薪资情况 他本人是这样说的☟ ...

  5. java类,函数传参

    1 package 传参练习; 2 //学生姓名组成的数组:指定区间和查找的名字返回此人是否存在(如果存在返回位置否则-1) 3 public class test1 { 4 public stati ...

  6. 电脑装MySQL免安装版配置失败提示系统错误2怎么解决?

    一·准备工作 我下载安装的版本是:mysql-8.0.16-winx64(免安装版) 下载地址:https://www.mysql.com/ (官网地址)https://cdn2.lmonkey.co ...

  7. 【不尽如人意的redisTemplete封装】

    线下项目里对spring redisTemplete进行了简单的封装,但是项目里关于其序列化的配置真的有点一言难尽: 可以看到这里用了JdkSerializationRedisSerializer去对 ...

  8. python中字符串的编码和解码

    1. 常用的编码 ASCII:只能表示一些字母,数字和特殊的字符,占一个字节 GBK:国家简体中文字符集和繁体字符集,兼容ASCII,占两个字节 Unicode:能够表示全世界上所有的字符,Unico ...

  9. Prafab Varient 预制体变体

    预制体与类的类比思维:     预制体相当于一个类,当它应用到场景当中,就是一个实例. 类的继承特性也充分运用到预制体中,即预制体变体. 相似预制体的需求场景:         例子1:多个游戏的窗口 ...

  10. 3D网页小实验——将txt配置文本转化为3D陈列室

    设计目标:借鉴前辈编程者的经验将简单的配置文本转化为3D场景,并根据配置文件在场景中加入图片和可播放的视频,最终形成可浏览的3D陈列室. 一.使用效果 1.txt配置文件: (博客园的富文本编辑器会改 ...