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

c++处理string类型的工具和常用方法总结

文章目录

      • 1. 基本使用 `#include <string>`
      • 2. c风格的使用 `#include <cstring>`
      • 3. 字符串流 `#include <sstream>`
      • 4. 类型转化`#include <cctype>`
      • 5. 算法`#include <algorithm>`
      • 6. 正则表达式 `<regex>`

在C++中,处理字符串类型的头文件主要有以下几个:

  1. #include <string>:用于标准的C++字符串类std::string,提供了许多成员函数和操作符来处理字符串。
  2. #include <cstring>:用于C风格字符串处理的库函数,例如strlen, strcpy, strcat等。
  3. #include <sstream>:用于字符串流std::stringstream,可以方便地进行字符串与其他类型之间的转换。
  4. #include <cctype>:用于字符处理的库函数,例如isdigit, isalpha, tolower, toupper等。
  5. #include <algorithm>:虽然不是专门用于字符串处理的,但其中的一些算法如std::find, std::sort等可以用来处理字符串。

下面是每个头文件的简要说明和一些示例:

1. 基本使用 #include <string>

#include <iostream>
#include <string>int main() {std::string str = "Hello, World!";std::cout << str << std::endl;std::cout << "Length: " << str.length() << std::endl;std::cout << "Substring: " << str.substr(0, 5) << std::endl;return 0;
}

2. c风格的使用 #include <cstring>

#include <iostream>
#include <cstring>int main() {const char* str1 = "Hello, ";const char* str2 = "World!";char str3[50];std::strcpy(str3, str1);std::strcat(str3, str2);std::cout << str3 << std::endl;return 0;
}

3. 字符串流 #include <sstream>

#include <iostream>
#include <sstream>int main() {int num = 42;std::stringstream ss;ss << "Number: " << num;std::string str = ss.str();std::cout << str << std::endl;std::string input = "123";int value;std::stringstream(input) >> value;std::cout << "Value: " << value << std::endl;return 0;
}

4. 类型转化#include <cctype>

#include <iostream>
#include <cctype>int main() {char c = 'a';if (std::isalpha(c)) {std::cout << c << " is an alphabet character." << std::endl;}if (std::isdigit('9')) {std::cout << "'9' is a digit." << std::endl;}char upper = std::toupper(c);std::cout << "Uppercase: " << upper << std::endl;return 0;
}

5. 算法#include <algorithm>

#include <iostream>
#include <string>
#include <algorithm>int main() {std::string str = "dcba";std::sort(str.begin(), str.end());std::cout << "Sorted string: " << str << std::endl;return 0;
}

6. 正则表达式 <regex>

在C++中,可以使用标准库中的 <regex> 头文件来进行正则表达式匹配和处理字符串。以下是一些常用的类和函数:

  • std::regex: 表示正则表达式对象。
  • std::smatch: 用于存储匹配结果。
  • std::regex_search: 用于搜索字符串中的正则表达式模式。
  • std::regex_match: 用于匹配整个字符串。
  • std::regex_replace: 用于替换字符串中的匹配模式。
  1. 使用 std::regex_search
#include <iostream>
#include <string>
#include <regex>int main() {std::string text = "The quick brown fox jumps over the lazy dog.";std::regex pattern("quick\\s(brown)\\sfox");std::smatch matches;if (std::regex_search(text, matches, pattern)) {std::cout << "Match found: " << matches[0] << std::endl;if (matches.size() > 1) {std::cout << "Captured group: " << matches[1] << std::endl;}} else {std::cout << "No match found." << std::endl;}return 0;
}
  1. 使用 std::regex_match
cpp
Copy code
#include <iostream>
#include <string>
#include <regex>int main() {std::string text = "123-456-7890";std::regex pattern("\\d{3}-\\d{3}-\\d{4}");if (std::regex_match(text, pattern)) {std::cout << "String matches the pattern." << std::endl;} else {std::cout << "String does not match the pattern." << std::endl;}return 0;
}
  1. 使用 std::regex_replace
cpp
Copy code
#include <iostream>
#include <string>
#include <regex>int main() {std::string text = "My phone number is 123-456-7890.";std::regex pattern("\\d{3}-\\d{3}-\\d{4}");std::string replacement = "***-***-****";std::string result = std::regex_replace(text, pattern, replacement);std::cout << "Original text: " << text << std::endl;std::cout << "Modified text: " << result << std::endl;return 0;
}

说明

  1. std::regex_search:
    • 用于在字符串中搜索匹配的子字符串。
    • 返回 truefalse,并将匹配结果存储在 std::smatch 对象中。
  2. std::regex_match:
    • 用于匹配整个字符串。
    • 仅当整个字符串与正则表达式完全匹配时,返回 true
  3. std::regex_replace:
    • 用于替换字符串中所有匹配的子字符串。
    • 返回一个新的字符串,其中所有匹配的子字符串都被替换为指定的字符串。

通过使用这些正则表达式工具,可以在C++中方便地进行字符串模式匹配和替换操作。
这些头文件和示例展示了如何在C++中处理字符串和字符的不同方法。根据具体需求选择合适的头文件和函数可以大大提高程序的效率和可读性。

相关文章:

  • 一文搞懂大模型训练加速框架 DeepSpeed 的使用方法!
  • 03-07Java自动化之JAVA基础之循环
  • 图像编解码器在AI绘画中的革新作用
  • 计算机网络 —— 网络层(IP数据报)
  • 陪玩小程序都需要怎么做?
  • 为下一波创新做准备:人工智能和元宇宙
  • 当C++的static遇上了继承
  • Github 2024-06-07开源项目日报 Top10
  • C++的MQTT开发:使用Paho的C++接口实现消息发布、订阅、连接RabbitMQ
  • 问题:功夫菜产品的成本由哪几方面构成() #经验分享#其他
  • Docker 常用命令以及镜像选择
  • Docker中搭建likeadmin
  • Tensorflow音频分类
  • 使用Python创建Word文档
  • AI绘画中的图像格式技术
  • (三)从jvm层面了解线程的启动和停止
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【347天】每日项目总结系列085(2018.01.18)
  • Apache的80端口被占用以及访问时报错403
  • docker-consul
  • Java超时控制的实现
  • PHP的Ev教程三(Periodic watcher)
  • SegmentFault 2015 Top Rank
  • underscore源码剖析之整体架构
  • 翻译:Hystrix - How To Use
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 搞机器学习要哪些技能
  • 记一次和乔布斯合作最难忘的经历
  • 类orAPI - 收藏集 - 掘金
  • 面试遇到的一些题
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • MyCAT水平分库
  • Spring第一个helloWorld
  • ​Java基础复习笔记 第16章:网络编程
  • ​secrets --- 生成管理密码的安全随机数​
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​一些不规范的GTID使用场景
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #laravel 通过手动安装依赖PHPExcel#
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C语言)fread与fwrite详解
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二十三)Flask之高频面试点
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (剑指Offer)面试题34:丑数
  • (三十五)大数据实战——Superset可视化平台搭建
  • (学习总结)STM32CubeMX HAL库 学习笔记撰写心得
  • (转)memcache、redis缓存
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等