欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > C++:字符串操作函数

C++:字符串操作函数

2025/12/14 3:58:22 来源:https://blog.csdn.net/qq_43441284/article/details/147989349  浏览:    关键词: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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词