C++中的字符串操作<cstring>和<string>的区别

简介: 目录目录参考资料字符串cstring和string的区别在哪string类的实现 注意不要盲目相信以下内容! 不要盲目相信以下内容! 不要盲目相信以下内容! (重要的事情说三遍),虽然以下内容也经过了我的验证,但是我的验证可能有错误的地方,欢迎大家留言告知。

目录


注意不要盲目相信以下内容! 不要盲目相信以下内容! 不要盲目相信以下内容! (重要的事情说三遍),虽然以下内容也经过了我的验证,但是我的验证可能有错误的地方,欢迎大家留言告知。希望这篇文章成为你深入探索相关领域的引子启发,而不是标准答案


参考资料

basic_string
cstring
string类使用

字符串

字符串在C++中由两种形式,第一种为string对象,另一种为char类型的数组即字符数组。
通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。
两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。

设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。

这是一些字符串处理算法,在字符串上进行不同的处理:
字符串查找算法
正则表达式算法
模式匹配
字符串的匹配算法(kmp)
AC自动机


cstring和string的区别在哪?

C++中由C语言的string.h库转的<cstring>库还有C++的basic_string库<string>有什么区别和联系?是不是可以理解成<string>库是包含了一些自定义函数的模板类?

有了<string>才有了string对象,所以<string>中主要是操作string对象,而<cstring>主要以char *类型为参数操作字符数组?

哦,是不是说封装成了类,只有字符串操作函数?

可以看一下以下代码,能够发现一些现象:

#include<iostream>
#include<cstring>
//#include<string>
using namespace std;

int main()
{
    string s = "Can you?";
    cout << s;//error,没有与std::string匹配的操作符
    system("pause");
    return 0;
}

当我们只包含了<cstring>时,这时如果couture<<s;就会报错,而我们include<string>后就可以正常运行了,这是为什么呢?

其实这验证了我们之前的猜想,让我们从string的实现来看一下。


string类的实现

C语言的字符串函数,简单而高效。C++ string类,功能强大而复杂(对于我这样的人来讲,复杂了点)。简单的比较没有意义,只是在特定的情况下哪一个更适合的问题。

而在决定哪一个更适合之前,你可能需要明白:

A STL标准模板库中的string类使用异常来传递错误

B STL标准模板库中的string类,是一个具有写时才拷贝(Copy-On-Write)技术的类。Copy-On-Write使用了“引用计数“,在下列情况下会使用Copy-On-Write:1)以别的类构造自己,2)以别的类赋值
(Copy-On-Write另一个被用到的地方是Linux在创建自己的进程时会使用这一技术,感兴趣的同学可以自行查阅相关资料)

C 不必担心内存是否足够和字符串长度的同时,你必须放弃严格控制其内存申请释放的想法。


目录
相关文章
|
2月前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
74 5
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
53 2
|
2月前
|
安全
String、StringBuffer、StringBuilder的区别
String 由 char[] 数组构成,使用了 final 修饰,对 String 进行改变时每次都会新生成一个 String 对象,然后把指针指向新的引用对象。 StringBuffer可变并且线程安全;有一定缓冲区容量,字符串大小没超过容量,不会重新分配新的容量,适合多线程操作字符串; StringBuiler可变并且线程不安全。速度比StringBuffer更快,适合单线程操作字符串。 操作少量字符数据用 String;单线程操作大量数据用 StringBuilder;多线程操作大量数据用 StringBuffer
|
3月前
|
C++ 容器
|
3月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
30 1
|
3月前
|
C++ 容器
|
3月前
|
C++ 容器
|
3月前
|
存储 C++ 容器
|
3月前
|
存储 安全 Java
String、StringBuffer 和 StringBuilder 的区别
【10月更文挑战第21天】String、StringBuffer 和 StringBuilder 都有各自的特点和适用场景。了解它们之间的区别,可以帮助我们在编程中更合理地选择和使用这些类,从而提高程序的性能和质量。还可以结合具体的代码示例和实际应用场景,进一步深入分析它们的性能差异和使用技巧,使对它们的理解更加全面和深入。
57 0
|
3月前
|
C语言 C++
深度剖析C++string(中)
深度剖析C++string(中)
60 0