字符串操作(CC++)

news2024/11/13 15:57:29

字符串操作

  • 1. C语言
    • 基本使用
    • 字符串操作函数
  • 2. C++
  • 3. 对比

C语言和C++在字符串操作上有很大的不同,这主要是因为C++标准库提供了更强大、更易于使用的字符串类(std::string),而C语言主要依赖字符数组和一系列标准库函数(如strcpy、strcat、strlen等)来处理字符串。

1. C语言

在C语言中,字符串通常被实现为字符数组,以空字符(\0)结尾。对字符串的操作通常通过指针和一系列的标准库函数来完成。

基本使用

字符串常量是一个字符数组。”I am a string“ ,字符串常量占据的存储单元数也因此比双引号内的字符数大1。

  • 字符串常量使用
printf("Hello, world\n");
char *pmessage;
pmessage = "now is the time";  //都是指针使用
  • 字符数组与字符指针
char amessage[] = "nw is the time"; /* 定义一个数组*/
char *pmessage = "now is the time"; /* 定义一个指针*/

在这里插入图片描述

  • 复制字符串程序
void strcpy(char *s, char *t)  //将t拷贝到s中
{
	while (*s++ = *t++)
;
}
  • 进栈和出栈操作
*p++ = val;  //将val压入栈
val = *--p;  //将栈顶元素弹出到val中

字符串操作函数

  1. 创建和初始化:通过声明字符数组并手动赋值或使用字符串字面量来初始化。
  2. 连接:使用strcat函数。
  3. 复制:使用strcpy函数。
  4. 比较:使用strcmp函数。
  5. 查找:使用strstr、strchr等函数。
  6. 长度:使用strlen函数。
strcat(s, t)        //将t指向的字符串连接到s指向的字符串的末尾
strncat(s, t, n)    //将 t指向的字符串中前n个字符连接到s指向的字符串的末尾
strcmp(s, t)        //根据s 指向的字符串小于(s<t)、等于(s==t)或大于(s>t)t指向的字符串的不同情况,分别返回负整数、0或正整数
strncmp(s, t, n)    //同 strcmp相同,但只在前n个字符中比较
strcpy(s, t)        //将t指向的字符串复制到s指向的位置
strncpy(s, t, n)    //将 t指向的字符串中前n个字符复制到s指向的位置
strlen(s)           //返回s指向的字符串的长度
strchr(s, c)        //在s指向的字符串中查找c,若找到,则返回指向它第一次出现的位置的指针,否则返回NULL
strrchr(s, c)       //在s指向的字符串中查找c,若找到,则返回指向它最后一次出现的位置的指针,否则返回NULL

C语言字符串操作的一个主要缺点是容易发生缓冲区溢出,因为函数(如strcpy和strcat)不会自动检查目标缓冲区的大小。

2. C++

在C++中,字符串被封装在std::string类中,该类提供了丰富的成员函数和运算符重载,使得字符串操作更加安全和直观。
std::string 是 C++ 标准库中的一个类,用于处理字符串。它提供了许多方法来创建、操作和管理字符串,如连接、查找、比较、替换和分割等操作。std::string 类定义在 头文件中。

  • std::string 类的基本用法示例:

创建字符串

std::string str1 = "Hello, World!"; // 通过字面量初始化
std::string str2(str1); // 通过另一个 string 对象初始化
std::string str3(10, 'a'); // 创建一个包含 10 个 'a' 的字符串

访问字符串

char firstChar = str1[0]; // 通过索引访问字符
std::cout << str1.c_str() << std::endl; // 将 string 转换为 C 风格字符串并打印

修改字符串

str1 += "!"; // 连接字符串
str1.append(" again!"); // 另一种连接字符串的方法
str1[0] = 'h'; // 修改第一个字符
str1.replace(7, 6, "C++"); // 从索引 7 开始,替换 6 个字符为 "C++"

字符串比较

if (str1 == str2) {
    // 如果 str1 等于 str2,执行这里
}
if (str1 < str2) {
    // 如果 str1 小于 str2,执行这里
}

查找字符串

size_t pos = str1.find("World"); // 查找 "World" 的位置
if (pos != std::string::npos) {
    // 如果找到了,执行这里
}

字符串长度

size_t len = str1.length(); // 获取字符串长度
// 或者
size_t size = str1.size(); // 这与 length() 是等效的

字符串截取

std::string substr = str1.substr(7, 5); // 从索引 7 开始,截取 5 个字符

字符串插入

str1.insert(7, "C++"); // 在索引 7 的位置插入 "C++"

字符串删除

str1.erase(7, 5); // 从索引 7 开始,删除 5 个字符

3. 对比

  • 安全性:C++的std::string类提供了更高的安全性,因为它内部自动管理内存并防止缓冲区溢出。而C语言的字符串操作则需要程序员自己管理内存,容易出现安全问题。
  • 易用性:C++的std::string类提供了更直观、更易用的接口,如运算符重载和成员函数。而C语言的字符串操作则需要使用一系列的标准库函数,接口相对繁琐。
  • 性能:在某些情况下,C语言的字符串操作可能会比C++的std::string类更快,因为std::string类在内部进行了许多额外的内存管理和安全检查。但是,在大多数情况下,这种性能差异可以忽略不计,而且使用std::string可以大大提高代码的安全性和可读性。
  • 兼容性:C语言的字符串操作是C++语言的一部分,因此C++代码可以兼容地使用C语言的字符串函数和操作。但是,由于C++提供了更强大、更安全的std::string类,因此在实际开发中通常更倾向于使用std::string。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1908233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Halcon Ean13 一维码读取

一 EAN码介绍 1 EAN码定义: EAN码是国际物品编码协会制定的一种商品用条码&#xff0c;通用于全世界。EAN码符号有标准版&#xff08;EAN-13&#xff09;和缩短版&#xff08;EAN-8&#xff09;两种。标准版表示13位数字&#xff0c;又称为EAN13码&#xff0c;缩短版表示8位数…

SSM慢性病患者健康管理系统-计算机毕业设计源码04877

目 录 摘要 1 绪论 1.1 研究意义 1.2研究目的 1.3论文结构与章节安排 2 慢性病患者健康管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分…

day02_员工管理

文章目录 新增员工需求分析和设计代码开发功能测试代码完善录入的用户名已存在&#xff0c;抛出异常后没有处理新增员工的时候&#xff0c;创建人id和修改人id设置为了固定值ThreadLocal&#xff08;面试题&#xff09; 分页查询问题解决 启用禁用员工账号需求和分析代码设计 编…

分享外贸工作中常用英文标准表达和英文语句

常用英文表达 报拉格斯最低到岸价 quote the lowest price CIF Lagos经营纺织品多年 be in the line of textiles for many years货物受欢迎 the goods are very popular with customers / have met with a warm reception /be well received/accepted/ enjoy a wide populari…

2024年7月2日~2024年7月8日周报

目录 一、前言 二、完成情况 2.1 吴恩达机器学习系列课程 2.1.1 分类问题 2.1.2 假说表示 2.1.3 判定边界 2.2 学习数学表达式 2.3 论文写作情况 2.3.1 题目选取 2.3.2 摘要 2.3.3 关键词 2.3.4 引言部分 2.3.4 文献综述部分 三、下周计划 3.1 存在的问题 3.2 …

Nacos注册中心相关错误记录

文章目录 1&#xff0c;com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:jar:unknown was not found1.1 定位及解决方案1.2&#xff0c;简要说明dependencyManagement的作用 2&#xff0c;nacos启动失败2.1 解决方案 1&#xff0c;com.alibaba.cloud:spring-c…

七大AI绘画软件大比拼!高效且免费!

在当今数字时代&#xff0c;人工智能技术广泛应用于各个行业&#xff0c;包括艺术创作。人工智能绘画软件可以帮助艺术家更快、更有效地创作。然而&#xff0c;市场上人工智能绘画软件的选择也令人眼花缭乱。那么&#xff0c;哪种人工智能绘画软件更好呢&#xff1f;需要明确的…

《UDS协议从入门到精通》系列——图解0x84:安全数据传输

《UDS协议从入门到精通》系列——图解0x84&#xff1a;安全数据传输 一、简介二、数据包格式2.1 服务请求格式2.2 服务响应格式2.2.1 肯定响应2.2.2 否定响应 Tip&#x1f4cc;&#xff1a;本文描述中但凡涉及到其他UDS服务的&#xff0c;均提供专栏内文章链接跳转方式以便快速…

平安消保在行动 | 守护每一个舒心笑容 不负每一场双向奔赴

“要时刻记得以消费者为中心&#xff0c;把他们当做自己的朋友&#xff0c;站在他们的角度去思考才能更好地解决问题。” 谈及如何成为一名合格的消费者权益维护工作人员&#xff0c;平安养老险深圳分公司负责咨诉工作的庞宏霄认为&#xff0c;除了要具备扎实的专业技能和沟通…

大舍传媒:如何在海外新闻媒体发稿报道摩洛哥?

引言 作为媒体行业的专家&#xff0c;我将分享一些关于在海外新闻媒体发稿报道摩洛哥的干货教程。本教程将带您深入了解三个重要的新闻媒体平台&#xff1a;Mediterranean News、Morocco News和North African News。 地中海Mediterranean News Mediterranean News是一个知名…

景芯SoC训练营DFT debug

景芯训练营VIP学员在实践课上遇到个DFT C1 violation&#xff0c;导致check_design_rule无法通过&#xff0c;具体报错如下&#xff1a; 遇到这个问题第一反映一定是确认时钟&#xff0c;于是小编让学员去排查add_clock是否指定了时钟&#xff0c;指定的时钟位置是否正确。 景芯…

Spring AOP源码篇四之 数据库事务

了解了Spring AOP执行过程&#xff0c;再看Spring事务源码其实非常简单。 首先从简单使用开始, 演示Spring事务使用过程 Xml配置&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema…

SpringBoot的热部署和日志体系

SpringBoot的热部署 每次修改完代码&#xff0c;想看效果的话&#xff0c;不用每次都重新启动代码&#xff0c;等待项目重启 这样就可以了 JDK官方提出的日志框架&#xff1a;Jul log4j的使用方式&#xff1a; &#xff08;1&#xff09;引入maven依赖 &#xff08;2&#x…

Qt QWizard新建向导实例

使用QWizard做新建向导&#xff0c;最简单的实例 class MyWizard : public QWizard { public: MyWizard(QWidget* parent nullptr); QWizardPage* createFirstPage(); QWizardPage* createSecondPage(); QWizardPage* createThirdPage(); }; MyWizard::MyWizard(QWidget* par…

19_谷歌GoogLeNet(InceptionV1)深度学习图像分类算法

1.1 简介 GoogLeNet&#xff08;有时也称为GoogleNet或Inception Net&#xff09;是一种深度学习架构&#xff0c;由Google的研究团队在2014年提出&#xff0c;主要设计者为Christian Szegedy等人。这个模型是在当年的ImageNet大规模视觉识别挑战赛&#xff08;ILSVRC&#xf…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

昇思25天学习打卡营第5天|MindSpore网络模型构建

打卡 目录 打卡 模型类 模型网络&#xff1a;定义与使用 模型层级分解 nn.Flatten 张量转换-演示查看 nn.Dense 全连接层-演示查看 nn.ReLU 非线性激活层-演示查看 nn.SequentialCell 有序网络容器 nn.Softmax 多分类概率预测 模型参数 前置感受&#xff1a;总的来说…

跟《经济学人》学英文:2024年07月06日这期:How Starbucks caffeinates local economies

How Starbucks caffeinates local economies Call it the frappuccino effect frappuccino&#xff1a;星冰乐 星巴克如何刺激当地经济&#xff1a;称之为星冰乐效应 原文&#xff1a; Starbucks offers endless opportunities for innovation. Parts of social media del…

Scrapy框架的基本使用教程

1、创建scrapy项目 首先在自己的跟目录文件下执行命令&#xff1a; PS D:\BCprogram\python_pro\bigdata> scrapy startproject theridion_grallatorscrapy startproject 项目名 具体执行操作如下&#xff1a;1、创建项目目录&#xff1a;Scrapy会在当前工作目录下创建一…

OceanBase 配置项系统变量实现及应用详解(1):配置项的定义及使用方法

《OceanBase 配置项&系统变量实现及应用详解》专题导读 在使用OceanBase的过程中&#xff0c;看到大家经常会遇到“参数”、“配置项”、“系统变量”等概念&#xff0c;却不太清楚它们是不是同一个东西&#xff0c;以及应该如何使用。一些对数据库开发感兴趣的朋友&#…