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

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;
}

相关文章:

  • uniapp-商城-60-后台 新增商品(属性的选中和页面显示,数组join 的使用)
  • NexBot AI 1.9.3 | 专业AI写作助手,高自由度定制内容,支持中文设置
  • foxmail - foxmail 启用超大附件提示密码与帐号不匹配
  • ESP32 PWM开发对比:底层驱动 VS Arduino封装,谁更适合你?
  • 4.3/Q1,Charls最新文章解读
  • XML介绍及常用c及c++库
  • Transformer 模型与注意力机制
  • LlamaIndex 第九篇 Indexing索引
  • 2025第三届盘古石杯初赛(计算机部分)
  • 系统线程nt!CcPfBootWorker里面的nt!MmPrefetchPages函数分析
  • 接触感知 钳位电路分析
  • 锚点跳转跟踪#
  • NHANES指标推荐:MDS
  • No module named‘serial‘解决办法
  • 【超分辨率专题】一种考量视频编码比特率优化能力的超分辨率基准
  • 智能AI构建工地安全网:跌倒、抽搐、区域入侵多场景覆盖
  • TII-2024《AGP-Net: Adaptive Graph Prior Network for Image Denoising》
  • 解决CLion控制台不能及时显示输出的问题
  • 告别传统的防抖机制,提交按钮的新时代来临
  • math toolkit for real-time development读书笔记一三角函数快速计算(1)
  • 国宝文物子弹库帛书二、三卷从美启程,18日凌晨抵京
  • 纪念|脖子上挂着红领巾的陈逸飞
  • 以军称已开始在加沙的新一轮大规模攻势
  • 幼儿园教师拍打孩子额头,新疆库尔勒教育局:涉事教师已被辞退
  • 梅花奖在上海|话剧《主角》:艺术与人生的交错
  • 独家 |《苏州河》上海上演,编剧海飞:上海的风能吹透我