C++:字符串操作函数

strcpy()

功能:把一个字符串复制到另一个字符串。

#include <iostream>
#include <cstring>
using namespace std;int main() {char src[] = "Hello";char dest[10];strcpy(dest, src);cout << "Copied string: " << dest << endl; // 输出: Copied string: Helloreturn 0;
}

原理:该函数会逐个字符地把源字符串(包含\0结束符)复制到目标字符串。
使用场景:当你需要复制字符串内容时可以使用,不过要留意目标字符串的空间得足够大。

实现方法:

char* my_strcpy(char* dest, const char* src) {char* originalDest = dest;while (*src != '\0') {*dest = *src;dest++;src++;}*dest = '\0'; // 添上终止符return originalDest;
}

strlen()

功能:计算字符串的长度(不包含结束符\0)。

#include <iostream>
#include <cstring>
using namespace std;int main() {char str[] = "Hello";size_t len = strlen(str);cout << "Length: " << len << endl; // 输出: Length: 5return 0;
}

原理:此函数从字符串起始位置开始计数,直到遇到\0结束符。
使用场景:在处理动态分配的字符串或者需要知晓字符串长度时会用到。
实现方法:

size_t my_strlen(const char* str) {const char* ptr = str;while (*ptr != '\0') {ptr++;}return ptr - str;
}

strcat()

功能:将一个字符串连接到另一个字符串的末尾。

#include <iostream>
#include <cstring>
using namespace std;int main() {char dest[20] = "Hello";char src[] = " World";strcat(dest, src);cout << "Concatenated: " << dest << endl; // 输出: Concatenated: Hello Worldreturn 0;
}

原理:该函数会找到目标字符串的\0结束符,然后把源字符串(包含\0)复制到这个位置。
使用场景:适用于拼接多个字符串的情况,但要保证目标字符串有足够的空间。

实现方法:

char* my_strcat(char* dest, const char* src) {char* originalDest = dest;// 先找到dest的末尾while (*dest != '\0') {dest++;}// 接着进行字符串的复制while (*src != '\0') {*dest = *src;dest++;src++;}*dest = '\0'; // 添上终止符return originalDest;
}

strcmp()

功能:对两个字符串进行比较。

#include <iostream>
#include <cstring>
using namespace std;int main() {char str1[] = "apple";char str2[] = "apple";char str3[] = "banana";cout << strcmp(str1, str2) << endl; // 输出: 0(相等)cout << strcmp(str1, str3) << endl; // 输出: 负值("apple" < "banana")cout << strcmp(str3, str1) << endl; // 输出: 正值("banana" > "apple")return 0;
}

原理:该函数会按字典序逐个比较字符的 ASCII 值,直到发现不同或者遇到\0。
使用场景:常用于字符串的排序或者查找操作。
实现方法:

int my_strcmp(const char* s1, const char* s2) {while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2) {s1++;s2++;}return (int)(*s1) - (int)(*s2);
}

std::string类中的length()和size()

这两个方法在功能上完全一样,都是返回字符串的字符个数,而且时间复杂度为 O (1)。

#include <iostream>
#include <string>
using namespace std;int main() {string str = "Hello";cout << str.length() << endl; // 输出: 5cout << str.size() << endl;   // 输出: 5return 0;
}

返回的长度不包含字符串结束符\0。
对于std::string来说,这两个方法是等价的,只是为了保持接口的一致性才提供了两种写法。
实现方法:

// std::string类中length()和size()的实现(原理)
// 由于std::string是类,下面展示的是其成员函数的实现原理
class MyString {
private:char* data;size_t len;
public:size_t length() const { return len; }size_t size() const { return len; }// 其他成员函数
};// 容器类中size()的实现(以vector为例)
// 下面展示的是vector成员函数的实现原理
template<typename T>
class MyVector {
private:T* data;size_t count;
public:size_t size() const { return count; }// 其他成员函数
};

容器类(像vector、list等)中的size()

size()是标准容器的通用方法,用于返回容器中元素的数量。

#include <iostream>
#include <vector>
using namespace std;int main() {vector<int> nums = {1, 2, 3, 4, 5};cout << nums.size() << endl; // 输出: 5return 0;
}

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

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

相关文章

1基·2台·3空间·6主体——蓝象智联解码可信数据空间的“数智密码”

近日&#xff0c;由全国数据标准化技术委员会编制的《可信数据空间 技术架构》技术文件正式发布&#xff0c;标志着我国数据要素流通体系向标准化、规范化迈出关键一步。该文件从技术功能、业务流程、安全要求三大维度对可信数据空间进行系统性规范&#xff0c;为地方、行业及企…

基于TI AM6442+FPGA解决方案,支持6网口,4路CAN,8个串口

TI AM6442FPGA解决方案具有以下技术优势及适用领域&#xff1a; 一、技术优势 ‌异构多核架构‌&#xff1a;AM6442处理器集成7个内核&#xff08;2xCortex-A534xCortex-R5F1xCortex-M4F&#xff09;&#xff0c;可实现应用处理、实时控制和独立任务分核协同&#xff0c;满足…

android vlc播放rtsp

最近在做IOT开发&#xff0c;需要把IOT设备的RTSP流在手机端播放&#xff0c;VLC是个不错的选择&#xff0c;使用起来简单方便。 1、在AndroidManifest.xml 中添加网络权限 <uses-permission android:name"android.permission.INTERNET"/> <uses-permissi…

前端面经 9 JS中的继承

借用Class实现继承 实现继承 extends super extends 继承父类 super调用父类的构造函数 子类中存在方法采取就近原则 &#xff0c;子类构造函数需要使用super()调用父类的构造函数 JS 静态属性和私有属性 寄生组合式继承

jQuery知识框架

一、jQuery 基础 核心概念 $ 或 jQuery&#xff1a;全局函数&#xff0c;用于选择元素或创建DOM对象。 链式调用&#xff1a;多数方法返回jQuery对象&#xff0c;支持连续操作。 文档就绪事件&#xff1a; $(document).ready(function() { /* 代码 */ }); // 简写 $(function…

【HCIA】BFD

前言 前面我们介绍了浮动路由以及出口路由器的默认路由配置&#xff0c;可如此配置会存在隐患&#xff0c;就是出口路由器直连的网络设备并不是运营商的路由器&#xff0c;而是交换机。此时我们就需要感知路由器的存活状态&#xff0c;这就需要用到 BFD&#xff08;Bidirectio…

前端流行框架Vue3教程:18. _组件数据传递

透传 Attributes 透传attribute指的是传递给一个组件&#xff0c;却没有被该组件声明为props或emits的attribute或者v-on事件监听器。最常见的例子就是class、style和id 当一个组件以单个元素为根作渲染时&#xff0c;透传的attribute会自动被添加到根元素上 透传 Attributes …

卓力达电铸镍网:精密制造与跨领域应用的创新典范

目录 引言 一、电铸镍网的技术原理与核心特性 二、电铸镍网的跨领域应用 三、南通卓力达电铸镍网的核心优势 四、未来技术展望 引言 电铸镍网作为一种兼具高精度与高性能的金属网状材料&#xff0c;通过电化学沉积工艺实现复杂结构的精密成型&#xff0c;已成为航空航天、电…

1.2.3.2 数据安全发展历程-大数据安全产品领域

从电商到物流&#xff1a;中国大数据安全产品如何进化&#xff1f; 在数字化时代&#xff0c;我们的一举一动都可能被记录——购物记录、聊天信息、位置轨迹……这些数据不仅关系到个人隐私&#xff0c;更涉及企业运营和国家安全的命脉。近年来&#xff0c;随着数据的爆发式增长…

服务器性能参数分析基础:磁盘-CPU-内存

在Linux系统中&#xff0c;"挂载"&#xff08;Mount&#xff09;是指将物理存储设备&#xff08;如磁盘分区&#xff09;或逻辑存储卷&#xff08;如LVM、网络存储&#xff09;关联到文件系统目录树的特定路径节点&#xff08;即挂载点&#xff09;&#xff0c;使得该…

密码学刷题小记录

base 64 打开后发现是一串字符串&#xff0c;&#xff0c;我们直接进行base64解密即可 Caesar 根据标题分析&#xff0c;我们知道这是凯撒解密&#xff0c;拖进去经过尝试在偏移量为12时直接得解&#xff08;这道题就是找偏移量比较麻烦&#xff09; Morse 这道题打开后&am…

Spring框架(三)

目录 一、JDBC模板技术概述 1.1 什么是JDBC模板 二、JdbcTemplate使用实战 2.1 基础使用&#xff08;手动创建对象&#xff09; 2.2 使用Spring管理模板类 2.3 使用开源连接池&#xff08;Druid&#xff09; 三、模拟转账开发 3.1 基础实现 3.1.1 Service层 3.1.2 Da…

[计算机网络]网络层

文章目录 408考研大纲IPV4数据报格式协议: IPv4 地址DHCP协议IP组播 408考研大纲 IPV4数据报格式 协议: 1:ICMP 6:TCP 17:UDP IPv4 地址 特殊IP 网络号全1又称直接广播地址&#xff0c;32位全1又称受限广播地址 因为255.255.255.255只能在本网络内广播&#xff0c;路由器不…

影楼精修-肤色统一算法解析

注意&#xff1a;本文样例图片为了避免侵权&#xff0c;均使用AIGC生成&#xff1b; 本文介绍影楼精修中肤色统一算法的实现方案&#xff0c;并以像素蛋糕为例&#xff0c;进行分析说明。 肤色统一就是将人像照片中皮肤区域的颜色进行统一&#xff0c;看起来颜色均匀一致&…

计算机网络:什么是计算机网络?它的定义和组成是什么?

计算机网络是指通过通信设备和传输介质&#xff0c;将分布在不同地理位置的计算机、终端设备及其他网络设备连接起来&#xff0c;实现资源共享、数据传输和协同工作的系统。其核心目标是使设备之间能够高效、可靠地交换信息。 关键组成部分 硬件设备 终端设备&#xff1a;如计算…

深度学习---获取模型中间层输出的意义

一、什么是 Hook&#xff08;钩子函数&#xff09;&#xff1f; 在 PyTorch 中&#xff0c;Hook 是一种机制&#xff0c;允许我们在模型的前向传播或反向传播过程中&#xff0c;插入自定义的函数&#xff0c;用来观察或修改中间数据。 最常用的 hook 是 forward hook&#xf…

存储器上如何存储1和0

在计算机存储器中&#xff0c;数据最终以**二进制形式&#xff08;0和1&#xff09;**存储&#xff0c;这是由硬件特性和电子电路的物理特性决定的。以下是具体存储方式的详细解析&#xff1a; 一、存储的物理基础&#xff1a;半导体电路与电平信号 计算机存储器&#xff08;…

Qt中的RCC

Qt资源系统(Qt resource system)是一种独立于平台的机制&#xff0c;用于在应用程序中传输资源文件。如果你的应用程序始终需要一组特定的文件(例如图标、翻译文件和图片)&#xff0c;并且你不想使用特定于系统的方式来打包和定位这些资源&#xff0c;则可以使用Qt资源系统。 最…

2918. 数组的最小相等和

2918. 数组的最小相等和 题目链接&#xff1a;2918. 数组的最小相等和 代码如下&#xff1a; class Solution { public:long long minSum(vector<int>& nums1, vector<int>& nums2) {auto [sum1, zero1] calc(nums1);auto [sum2, zero2] calc(nums2);i…

使用 Docker 部署 OnlyOffice

使用 Docker 部署 OnlyOffice 在如今容器化技术盛行的时代&#xff0c;Docker 已成为应用快速部署和隔离的最佳选择。OnlyOffice 作为一款功能强大的在线办公套件&#xff0c;通过 Docker 部署不仅能够简化安装和维护流程&#xff0c;还能在不同环境中保持一致性&#xff0c;极…