文章转载自: http://www.renfei.org/blog/introduction-to-cpp-string.html

1. 运算符重载

a. + 和 +=: 连接字符串

b. =: 字符串赋值

c. >、>=、< 和 <=: 字符串比较(例如a < b, aa < ab)

d. ==、!=: 比较字符串

e. <<、>>: 输出、输入字符串

注意:使用重载的运算符 + 时,必须保证前两个操作数至少有一个为 string 类型。例如,下面的写法是不合法的:

#include <iostream>
#include <string>
int main()
{string str = "cat";cout << "apple" + "boy" + str; // illegal!return 0;
}

2. 查找

string str;
cin >> str;str.find("ab");//返回字符串 ab 在 str 的位置
str.find("ab", 2);//在 str[2]~str[n-1] 范围内查找并返回字符串 ab 在 str 的位置
str.rfind("ab", 2);//在 str[0]~str[2] 范围内查找并返回字符串 ab 在 str 的位置//first 系列函数
str.find_first_of("apple");//返回 apple 首次在 str 中出现的位置
str.find_first_of("apple", 2);//返回 apple 首次在 str[2]~str[n-1] 范围中出现的位置
str.find_first_not_of("apple");//返回除 apple 以外的任何一个字符在 str 中首次出现的位置
str.find_first_not_of("apple", 2);//返回除 apple 以外的任何一个字符在 str[2]~str[n-1] 范围中首次出现的位置//last 系列函数
str.find_last_of("apple");//返回 apple 最后一次在 str 中出现的位置
str.find_last_of("apple", 2);//返回 apple 最后一次在 str[0]~str[2] 范围中出现的位置
str.find_last_not_of("apple");//返回除 apple 以外的任何一个字符在 str 中最后一次出现的位置
str.find_last_not_of("apple", 2);//返回除 apple 以外的任何一个字符在 str[0]~str[2] 范围中最后一次出现的位置//以上函数如果没有找到,均返回string::npos
cout << string::npos;

3. 子串

str.substr(3); //返回 [3] 及以后的子串
str.substr(2, 4); //返回 str[2]~str[2+(4-1)] 子串(即从[2]开始4个字符组成的字符串)

4. 替换

str.replace(2, 4, "sz");//返回把 [2]~[2+(4-1)] 的内容替换为 "sz" 后的新字符串
str.replace(2, 4, "abcd", 3);//返回把 [2]~[2+(4-1)] 的内容替换为 "abcd" 的前3个字符后的新字符串

5. 插入

str.insert(2, "sz");//从 [2] 位置开始添加字符串 "sz",并返回形成的新字符串
str.insert(2, "abcd", 3);//从 [2] 位置开始添加字符串 "abcd" 的前 3 个字符,并返回形成的新字符串
str.insert(2, "abcd", 1, 3);//从 [2] 位置开始添加字符串 "abcd" 的前 [2]~[2+(3-1)] 个字符,并返回形成的新字符串

6. 删除

str.erase(3);//删除 [3] 及以后的字符,并返回新字符串
str.erase(3, 5);//删除从 [3] 开始的 5 个字符,并返回新字符串

7. 交换

str1.swap(str2);//把 str1 与 str2 交换

8. 其他

str.size();//返回字符串长度
str.length();//返回字符串长度
str.empty();//检查 str 是否为空,为空返回 1,否则返回 0
str[n];//存取 str 第 n + 1 个字符
str.at(n);//存取 str 第 n + 1 个字符(如果溢出会抛出异常)

9. 实例

a. 查找给定字符串并把相应子串替换为另一给定字符串
    string 并没有提供这样的函数,所以我们自己来实现。由于给定字符串可能出现多次,所以需要用到 find() 成员函数的第二个参数,每次查找之后,从找到位置往后继续搜索。直接看代码(这个函数返回替换的次数,如果返回值是 0 说明没有替换)

int str_replace(string &str, const string &src, const string &dest) //在str中把所有src替换为dest
{int counter = 0;string::size_type pos = 0;while ((pos = str.find(src, pos)) != string::npos) {str.replace(pos, src.size(), dest);++counter;pos += dest.size();}return counter;
}

b. 从给定字符串中删除一给定字串

方法和上面相似,内部使用 erase() 完成。

int str_erase(string &str, const string src) // 在str中删除所有的src
{int counter = 0;string::size_type pos = 0;while ((pos = str.find(src, pos)) != string::npos) {str.erase(pos, src.size());++counter;}return counter;
}

C++ sting字符串函数详解相关推荐

  1. 字符函数和字符串函数详解(二)strncpy strncat strncmp strstr strtok(及其模拟实现)

     系列文章目录 字符函数和字符串函数详解(一)strlen strcpy strcat strcmp 字符函数和字符串函数详解(二)strncpy strncat strncmp strstr str ...

  2. 【C语言进阶】⑦字符串函数详解

    文章目录 一.字符串函数汇总 1. 求字符串长度 - strlen(): 1.2 函数介绍: 1.3 自己模拟实现strlen()函数的功能 1.3.1 计数器版本 2. 字符串拷贝函数 - strc ...

  3. 字符函数和字符串函数详解

    目录 前言 函数介绍及模拟 strlen函数 模拟实现 strcpy函数 模拟实现 strncpy函数 strcat函数 模拟实现 strncat函数 strcmp函数 模拟实现 strncmp函数 ...

  4. mysql strcmp s1 s2_MySQL函数基础——字符串函数详解

    昨天,咱们对MySQL的数学函数进行了讲解,今天,咱们再来解析MySQL字符串函数. 字符串函数主要用来处理数据库中的字符串数据,MySQL中字符串函数有:计算字符串长度函数.字符串合并函数.字符串替 ...

  5. php字符串分割tp模板,ThinkPHP 模板substr的截取字符串函数详解

    ThinkPHP 模板substr的截取字符串函数 在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $star ...

  6. php向前截取字符串函数,ThinkPHP 模板substr的截取字符串函数详解

    ThinkPHP 模板substr的截取字符串函数 在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $star ...

  7. awk内置字符串函数详解

    awk提供了许多强大的字符串函数,见下表: awk内置字符串函数 gsub(r,s) 在整个$0中用s替代r gsub(r,s,t) 在整个t中用s替代r index(s,t) 返回s中字符串t的第一 ...

  8. 【C语言】字符串函数详解

    hello~~,我是~小鹿 ,这是我的第一篇博客,没有循序渐进从基础开始写,只是最近在学习这里就写了,比较随心吧.希望这一篇博客能够给你带来帮助,之后也会继续写的,只是可能没有循序渐进,会比较杂七杂八 ...

  9. mysql函数编写格式_MySQL函数基础——字符串函数详解

    昨天,咱们对MySQL的数学函数进行了讲解,今天,咱们再来解析MySQL字符串函数. 字符串函数主要用来处理数据库中的字符串数据,MySQL中字符串函数有:计算字符串长度函数.字符串合并函数.字符串替 ...

  10. C语言常用字符串函数详解

    在C语言标准库里面,存在一个对字符串数组进行操作的函数的头文件为string.h. 常用的字符串函数有strlen,strcpy,strcat等等. 了解这些字符串函数是如何实现的可以有助于更好的使用 ...

最新文章

  1. mysql is复制表结构_MySQL复制表结构和内容到另一张表中的SQL语句
  2. pydev eclipse插件安装
  3. 简单有趣的 NLP 教程:手把手教你用 PyTorch 辨别自然语言(附代码)
  4. 空调水系统的节能方式与水泵调节
  5. SQL 注入工具集合
  6. C#DotNetBar TabControl将水平标签设置成竖直
  7. mysql 酒店管理设计_酒店管理系统的设计与实现(Myeclipse,MySQL)
  8. aws lambda_如何通过在本地模拟AWS Lambda来加速无服务器开发
  9. SpriteBuilder中的粒子系统属性
  10. asp.net程序涉及案例_定制小程序 | 企业在开发小程序前需要满足哪些条件?
  11. Spark SQL 用户自定义函数UDF、用户自定义聚合函数UDAF 教程(Java踩坑教学版)
  12. 『动态规划』最大子段和
  13. Eclipse环境下配置Tomcat
  14. mongo分组查询,统计 Group.grouping(),Group.first(),Accumulator(“$sum“, new Integer(1) 含义解释
  15. CSS动画文字闪烁问题
  16. rabbitmq中交换机类型direct和topic的区别
  17. 程序人生——苏嵌第六天
  18. 【数据结构】最小瓶颈路 加强版(Kruskal重构树RMQ求LCA)
  19. 如何获取股票交易数据接口?
  20. Comet OJ - Contest #5 D 迫真小游戏 (堆+set)

热门文章

  1. cnpm : 无法加载文件 C:\Users\zsl\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本
  2. 地摊经济一千年:从《韩熙载夜宴图》到木屋烧烤“撸串”
  3. Simulink中powergui的FFT分析怎么用m文件实现?
  4. 收藏:关于3g手机的市场调查报告
  5. npoi xlsx转换html,NPOI导Excel样式设置(转)
  6. 阿里云-个人建网站从0到精通(二)-快速搭建网站
  7. 论文解读:Decoupled Knowledge Distillation
  8. VS2019写C++的警告C6262(请考虑将某些数据移到堆中)
  9. 强烈分享8个功能强大,可以极大提高工作效率的软件
  10. 微软快捷键截图_如何在Microsoft Office的屏幕提示中显示快捷键