当前位置: 首页 > 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;
}
http://www.xdnf.cn/news/486253.html

相关文章:

  • 刷leetcodehot100返航版--双指针5/16
  • 虚拟来电 4.3.0 |集虚拟来电与短信于一体,解锁VIP优雅脱身
  • 腾讯云代码助手CodeBuddy使用体验
  • 7.1Java多线程安全和同步
  • vue 指令
  • python版本管理工具-pyenv轻松切换多个Python版本
  • DATE_FORMAT可以接收date类型,也可以接收String类型!
  • this.$set的用法-响应式数据更新
  • oracle主备切换参考
  • 初学者如何用 Python 写第一个爬虫?
  • 【LLM】大模型落地应用的技术 ——— 推理训练 MOE,AI搜索 RAG,AI Agent MCP
  • ​小店推客系统开发SEO全攻略:从技术架构到流量裂变,打造私域增长引擎
  • Android framework 中间件开发(二)
  • 贝叶斯英文单词拼写纠错器(Python)
  • 小型研发团队的项目管理:挑战与高效工具推荐
  • 实时数据流处理的利器:如何利用 Spark Streaming 让数据动起来?
  • Java 流(Stream)API
  • CSS- 3.1 盒子模型-块级元素、行内元素、行内块级元素和display属性
  • MySQL高效开发规范
  • 不清楚的点
  • RNope:结合 RoPE 和 NoPE 的长文本建模架构
  • git相关配置
  • 深入理解 this 指向与作用域解析
  • 使用 gcloud CLI 自动化管理 Google Cloud 虚拟机
  • AGI大模型(19):下载模型到本地之ModelScope(魔搭社区)
  • FreeSWITCH Jitter Buffer 技术解析与应用指南
  • OpenCV边界填充(Border Padding)详解:原理、方法与代码实现
  • TDuckX 2.6 正式发布|API 能力开放,核心表单逻辑重构,多项实用功能上线。
  • 【AI模型部署】
  • [模型部署] 1. 模型导出