当前位置: 首页 > news >正文

C++中string类常用函数的用法介绍

在C++中,string是一个功能强大的类,用于处理和操作文本数据。它属于C++标准库中的字符串库部分,专门用于处理字符串。与传统的C风格字符串相比,它提供了动态内存管理、类型安全和丰富的操作方法。

目录

一、构造和初始化

二、获取字符串内容

三、查找字符串位置

 四、修改字符串

    1. 删除

    2.插入  

    3.连接

    4.替换

五、字符串长度和大小


一、构造和初始化

  • string s:使用默认构造函数创建一个空字符串。
  • string s(const char* s):用C风格的字符串构造。
  • string s(size_t count, char ch):从给定数量的重复字符构造。
  • 复制构造
  • string s(const string& other):从另一个字符串的子串构造
#include <iostream>
#include <string>
using namespace std;int main() {string s1;                  // 默认构造,创建空字符串string s2("Hello");         // 从C风格字符串构造string s2_1("Hello",3);     //前三个字符string s2_2("Hello", 2, 3); //从第三个开始,长度为三string s3(10, 'x');         // 从10个字符'x'构造string s4 = s2;             // 将s2复制给s4string s5(s2, 3);           //从s2的第四个字符到最后string s5_1(s2, 2, 2);      //从s2的第三个字符开始,长度为2cout << "s1: " << s1 << endl;cout << "s2: " << s2 << endl;cout << "s2_1: " << s2_1 << endl; cout << "s2_2: " << s2_2 << endl;cout << "s3: " << s3 << endl;cout << "s4: " << s4 << endl;cout << "s5: " << s5 << endl;cout << "s5_1: " << s5_1 << endl;return 0;
}


二、获取字符串内容

  • 通过下标操作符访问
  • substr(size_t pos = 0, size_t len = npos):返回从 pos 开始的、长度为 len 的子字符串
#include <iostream>
#include <string>
using namespace std;int main() {string s("Hello World");char c = s[0];                // 'H'string s1 = s.substr(6,5);      //获取从第7个开始,长度为5的字符串cout << "c: " << c << endl;cout << "s1: " << s1 << endl;return 0;
}


三、查找字符串位置

  • find(const string& str, size_t pos = 0):查找子字符串 str,从位置 pos 开始搜索
  • rfind(const string& str, size_t pos = npos):从字符串末尾开始,反向查找子字符串 str
#include <iostream>
#include <string>
using namespace std;int main() {string s("Hello World");int pos1 = s.find("World");     // 返回子字符串"World"的起始位置int pos2_1 = s.rfind("World"); //结尾开始反向查找int pos2_2 = s.rfind("World", 9);   //第10个开始,反向查找cout << "pos1: " << pos1 << endl;cout << "pos2_1: " << pos2_1 << endl;cout << "pos2_2: " << pos2_2 << endl;return 0;
}


 四、修改字符串

    1. 删除

  • erase(size_t index, size_t count):删除从 index 开始的 count 个字符。

     2.插入  

  • insert(size_t index, const string& str):在 index 位置插入字符串 str

  3.连接

  • append(const string& str):在字符串末尾拼接上 str
  • 使用++=运算符连接字符串

     4.替换

  • replace(size_t pos, size_t len, const string& str):替换从 pos 开始的 len 个字符为 str

#include <iostream>
#include <string>
using namespace std;int main() {string s("Hello World");cout << "s: " << s << endl;s.erase(6, 5);                // 删除从位置6开始的5个字符cout << "s: " << s << endl;s.insert(6, "there");         // 在位置6插入"there"cout << "s: " << s << endl;s.append("!");                // 在字符串末尾追加"!"cout << "s: " << s << endl;s += s;                       //追加scout << "s: " << s << endl;s.replace(6, 5, "place");      // 替换从位置6开始的5个字符为"place"cout << "s: " << s << endl;return 0;
}


五、字符串长度和大小

  • size()获取字符串的长度
  • length()获取字符串的长度
  • empty():检查字符串是否为空,如果为空,返回 true
#include <iostream>
#include <string>
using namespace std;int main() {string str = "Hello World";cout << "Length1: " << str.size() << endl; cout << "Length2: " << str.length() << endl;if (!str.empty()) {cout << "The string is empty." << endl;}return 0;
}


感谢阅读,欢迎大家指正错误。

创作不易,如果我的文章对你有帮助,请点赞收藏关注,您的支持是我前进的最大动力。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • K个一组翻转链表(LeetCode)
  • 七天打造一套量化交易系统:Day8-阶段性总结、未完待续...
  • 为什么concurrenthashmap的segment要设计成可重入锁?
  • Linux源码阅读笔记13-进程通信组件中
  • 大厂linux面试题攻略五之数据库管理
  • delphi 12 学习如何登陆网站下载文件
  • 消息队列:Kafka吞吐量为什么比RocketMQ大
  • 3.特征工程-特征抽取、特征预处理、特征降维
  • 第一阶段面试问题(后半部分)
  • java之IO篇——File、字节流、字符流
  • 【IO】使用有名管道实现,一个进程用于给另一个进程发消息,另一个进程收到消息后,展示到终端上,并且将消息保存到文件上一份
  • 新书速览|AI创意商业广告设计:Adobe Firefly + Photoshop
  • 现代前端架构介绍(第一部分):App是如何由不同的构建块构成的
  • 数据中台建设之数据汇聚与数据交换
  • Apache Pig: 高级数据处理平台
  • ----------
  • 深入了解以太坊
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • [笔记] php常见简单功能及函数
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Codepen 每日精选(2018-3-25)
  • in typeof instanceof ===这些运算符有什么作用
  • JavaScript函数式编程(一)
  • MySQL主从复制读写分离及奇怪的问题
  • orm2 中文文档 3.1 模型属性
  • php中curl和soap方式请求服务超时问题
  • quasar-framework cnodejs社区
  • 从伪并行的 Python 多线程说起
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 排序算法学习笔记
  • 一个完整Java Web项目背后的密码
  • 一文看透浏览器架构
  • kubernetes资源对象--ingress
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • # include “ “ 和 # include < >两者的区别
  • #每日一题合集#牛客JZ23-JZ33
  • (1)bark-ml
  • (26)4.7 字符函数和字符串函数
  • (6)STL算法之转换
  • (70min)字节暑假实习二面(已挂)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (ZT)一个美国文科博士的YardLife
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (回溯) LeetCode 40. 组合总和II
  • (转)memcache、redis缓存
  • (转)菜鸟学数据库(三)——存储过程
  • (转)程序员技术练级攻略
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .Net Core与存储过程(一)