c语言中,字符串是以'\0'结尾的一些字符的集合。
如果说需要用到C语言的一些字符串里面的函数,头文件是#include<cstring>。
#include<string>是C++里面的string。
将从以上这几个方面进行阐述说明。
https://blog.csdn.net/u011000290/article/details/49020335
大佬把拷贝构造,构造,析构函数,赋值函数很清楚。大佬不愧是大佬。
string类的常用接口说明
1.string类对象的常见构造。
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string s1;
//string() 构造空的string类对象,即空字符串
string s2("hello world!");
//string(const char* s)用c-string来构造string类对象
string s3(10,'a');
//string(size_t n,char c)string类对象包含n个字符c
string s4(s2);
//string(const string &s)拷贝构造函数
string s5(s3,5);
//string(const string &s,size_t n)
//用s中的前n个字符构造新的string类对象
cout<<s1<<endl;
cout<<s2<<endl;
cout<<s3<<endl;
cout<<s4<<endl;
cout<<s5<<endl;
return 0;
}
有5种常见构造,需要注意的是拷贝构造函数这一种。
https://www.cnblogs.com/wangguchangqing/p/6141743.html这是一位大佬写的拷贝构造和赋值运算符的一些知识。
我不是很懂const char* s,char const * s,char* const s;
首先,const char* s,根据运算符优先级,*s首先先结合,代表指针,char代表指针类型,p指向的内容为const类型不可修改。
char const* s首先没有const*这种类型,所以const 修饰的和前面的是一样的,char const* s和const char* s是一样的。
char* const s 定义一个指向字符的指针常数,即const指针,不能修改指针,但能修改指针指向的内容。
https://blog.csdn.net/m0_37806112/article/details/81252151
https://blog.csdn.net/SilentOB/article/details/76994618这两篇博客讲述的很清楚。
2.string类对象的容量操作。
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string s("hello world!");
cout<<s.size()<<endl;
cout<<s.length()<<endl;
cout<<s.capacity()<<endl;
cout<<s<<endl;
s.clear();
//清空时只是将size清0,并不改变底层空间的大小也就是说容量大小不变
cout<<s.size()<<endl;
cout<<s.capacity()<<endl;
s.resize(10,'a');
cout<<s.size()<<endl;
cout<<s.capacity()<<endl;
cout<<s<<endl;
s.resize(25);//此时的有效字符个数增加到25个,多余的用'\0'来填充
cout<<s.size()<<endl;
cout<<s.capacity()<<endl;
cout<<s<<5<<endl;
s.resize(10);//此时的有效字符个数减少到10个,多余的用'\0'来填充
cout<<s.size()<<endl;
cout<<s.capacity()<<endl;
cout<<s<<5<<endl;
string s2;
s2.reserve(100);
cout<<s2.size()<<en