- (꒪ꇴ꒪ ),Hello我是祐言QAQ
- 我的博客主页:C/C++语言,Linux基础,ARM开发板,软件配置等领域博主🌍
- 快上🚘,一起学习,让我们成为一个强大的攻城狮!
- 送给自己和读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!
- 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏
在C++编程中,有一个强大的工具,它极大地简化了字符串处理,那就是string
类。与C语言中的字符串相比,string
类不仅更安全,还提供了更多的功能。本篇博客将详细介绍C++中的string
类,以及它与C语言字符串的区别,方便大家快速入门C++。
一、 动态分配与自动管理
在C语言中,字符串是通过字符数组表示的,需要手动管理内存的分配和释放。而在C++中,string
类是动态分配的字符串,它自动处理内存管理,避免了许多内存错误。这就意味着我们无需担心缓冲区溢出和内存泄漏等问题,大大节约开发时间(较小的代码量),也避免了一些不必要的犯错(手动管理内存的复杂性)。
下面我们就C与C++在内存管理上进行一下代码量对比体会一下动态分配与自动管理。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main() {//分配char *dynamicString = (char *)malloc(20 * sizeof(char));strcpy(dynamicString, "Dynamic string handling");//strcpy写入数据printf("%s\n", dynamicString);//打印//再分配dynamicString = realloc(dynamicString, 30 * sizeof(char));strcat(dynamicString, " in C"); //拼接printf("%s\n", dynamicString);//释放free(dynamicString);return 0;
}
然而在C++中,这些操作将不会在出现,string类将自动处理内存管理,下面让我们来看看C++实现同样的操作所需代码量吧:
#include <iostream>
#include <string>
using namespace std;int main() {//创建字符串string dynamicString = "Dynamic string handling";cout << dynamicString << endl;//输出dynamicString += " in C++"; // 自动扩展字符串长度cout << dynamicString << endl;//再输出return 0;
}
我天这么少嘛,即使是一个新学C++的同学恐怕也能看懂吧,所以这就是C++被发开的初衷,让编程更简单!
二、长度管理
C语言中的字符串以NULL终止,需要使用特定的字符(通常是‘\0
’)表示字符串的结束,容易出现缓冲区溢出。而C++中的string
类自带长度信息,不需要显式的NULL终止字符,从而更安全。
代码:
#include <iostream>
#include <string>
using namespace std;int main() {string s = "Hello, world!";cout << "字符串长度为: " << s.length() << endl;return 0;
}
三、 操作和功能
C语言中的字符串操作需要调用库函数,例如strcpy
、strcat
等。而C++中的string
类提供了丰富的成员函数,例如append
、insert
、substr
等,使字符串操作更加方便。
代码:
#include <iostream>
#include <string>
using namespace std;int main() {string s = "Hello";s.append(", world!"); // 追加字符串cout << s << endl;s.insert(5, " there"); // 插入字符串cout << s << endl;s.erase(6, 5); // 删除一部分字符串cout << s << endl;return 0;
}
四、拼接和连接
C语言中的字符串拼接需要手动分配足够的空间,并使用库函数strcat
进行拼接。
char str1[50] = "Hello, ";
char str2[] = "world!";
char result[100];strcpy(result, str1); // 复制 str1 到 result
strcat(result, str2); // 连接 str2 到 resultprintf("%s\n", result); // 输出: Hello, world!
C++中的string
类支持直接使用+
运算符进行字符串连接,极大地简化了操作。
#include <iostream>
#include <string>
using namespace std;int main() {string str1 = "Hello, ";string str2 = "world!";string result;result = str1 + str2;cout << result << endl; // 输出: Hello, world!return 0;
}
五、 赋值和复制
C语言中的字符串赋值需要使用库函数strcpy
或逐字符复制。
char source[] = "Hello";
char destination[20];
strcpy(destination, source);
C++中的string
类可以直接使用‘=
’进行赋值,同时支持深拷贝,不需要手动管理内存。
string source = "Hello";
string dest;
dest = source;
六、 可迭代性
C语言中的字符串不是容器,难以方便地进行迭代和遍历。
char str[] = "Hello";
for (int i = 0; str[i] != '\0'; i++) {printf("%c\n", str[i]);
}
C++中的string
类是标准的容器,支持使用迭代器或范围循环进行遍历。
string str = "Hello";
for (char c : str) {cout << c << endl;
}
七、 扩展性和自定义
C语言中的字符串操作受限,难以实现更高级的字符串处理。C++中的string
类允许自定义成员函数和操作,支持更复杂的字符串处理需求。
#include <iostream>
#include <string>
using namespace std; // 使用标准命名空间,避免频繁使用std::class MyString : public string { // 定义一个继承自string的自定义类MyString
public:void customFunction() { // 定义自定义成员函数customFunctioncout << "Custom function for MyString" << endl; // 输出自定义信息}
};int main()
{ // 主函数开始MyString customStr = "Custom String"; // 创建一个MyString类型的对象customStr,初始化为"Custom String"cout << customStr << endl; // 输出customStr的内容customStr.customFunction(); // 调用customFunction方法,输出自定义信息return 0; // 返回0,表示程序正常结束
}
通过这篇博客,深入探索了C++中的string
类,了解了它相较于C语言字符串的优势。string
类提供了更安全、更方便以及更功能丰富的字符串处理方式,是现代C++编程中的强大工具。无论是拼接、赋值、遍历还是其他字符串操作,string
类都能显著地提升代码的可读性、可维护性和安全性。在日常的C++开发中,强烈推荐使用string
类来处理字符串,以获得更好的开发体验。
更多C语言、Linux系统、ARM板实战和数据结构相关文章,关注专栏:
手撕C语言
玩转linux
脚踢数据结构
6818(ARM)开发板实战
📢写在最后
- 今天的分享就到这啦~
- 觉得博主写的还不错的烦劳
一键三连喔
~ - 🎉感谢关注🎉