C++——STL字符串01

1.首先介绍一下字符串这个类的几种不同的构造函数

#include<iostream>
#include<string>//注意不是包含(strng.h),带了.h的C的标准库
using namespace std;
int main()
{
//对于string这个类有多种构造函数
//1.
string str;
cout << str <<" "<<str.empty()<< endl;//.empty()可以查看这个字符串是否为空
//2.
string str1(5,'a');//用5个a来初始化这个对象
cout << str1 << endl;
//3.对于前面的字符串只是选取前面三个字符来进行初始化
string str3("asdfgkhk", 3);
cout << str3 << endl;
//4.调用拷贝构造函数
string str4(str3);
cout << str4 << endl;
//5.给三个参数,第一个参数是一个字符串,第二个是起始位置的下标,第三个是从起始位置开始选取几个元素
string str5("dkfjklsdjf", 3, 2);
cout << str5 << endl;
//6.直接用一个字符串进行初始化
string str6("woxihuanxiaoyihao");
cout << str6 << endl;
//7.和例5类似,只不过第一个参数给的是另一个string类的对象
string str7(str6,2, 3);
cout << str7 << endl;
//8.和例5类似,只不过第一个参数给的是一个对象
string str8(str6, 5);//但是用法有区别,这个是从下标5开始到最后
cout << str8 << endl;
//9.最常规的用法
string str9 = "woxihuanxiaoyihao";
cout << str9 << endl;
system("pause");
return 0;
}

2.首先string类型是一个容器,既然是容器就一定有容量,对于容量的设计并不是每次来多少个字符就申请多大的容量,因为如果这样做的话会很耽误效率,对于一般的编译器来说,首次初始化的时候如果少于15个字符,那么就会申请15个内存,但是只要超过了15,以后每次都会申请16个;(这条规则对于不同的编译器的效果是不一样的对于vs和codeblocks是15 16 原则,但是对于VC是31 32 原则)

#include<iostream>
#include<string>//注意不是包含(strng.h),带了.h的C的标准库
using namespace std;
int main()
{
//1.
string str;
cout << str.capacity() << endl;
string str0(15, 'a');
cout << str0.capacity()<<endl;//少于15个就会申请15个容量
//2.
string str2(16, 'a');
cout << str2.capacity()<<endl;//多余15个以后就会每次加上16
string str3(32, 'a');
cout << str3.capacity() << endl;


string str4;
str4.reserve(21);
/*
这个成员函数方法可以修改这个对象的内存,但是不是你想申请多大就是多大
如果你给的数字比他本来的内存小,那么你这条语句就是没有效果的
如果给的比本身大,那么还是遵循15 16 原则
*/
cout<<str4.capacity()<<endl;
system("pause");
return 0;
}

3.得到字符的长度和个数,效果是一样的(可能内部原理不一样,我也不清楚)

#include<iostream>
#include<string>//注意不是包含(strng.h),带了.h的C的标准库
using namespace std;
int main()
{
    string str="kdfksd";
    cout<<str.length()<<endl;//得到字符的长度
    cout<<str.size()<<endl;//得到字符的个数
system("pause");
return 0;

}

4.重新设置长度

#include<iostream>
#include<string>//注意不是包含(strng.h),带了.h的C的标准库
using namespace std;
int main()
{
    //1.设置的长度比原来大,不会截断
    string str="kdfksd";
    str.resize(45);//重新设置长度
    cout<<str.length()<<endl;//得到字符的长度
    cout<<str.size()<<endl;//得到字符的个数
    cout<<str.capacity()<<endl;
    cout<<str<<endl;
    //2.如果设置的长度小的话则会截断
    string str1="kdfksd";
    str1.resize(45);//重新设置长度
    cout<<str1.length()<<endl;//得到字符的长度
    cout<<str1.size()<<endl;//得到字符的个数
    cout<<str1.capacity()<<endl;
    cout<<str1<<endl;


system("pause");
return 0;

}

猜你喜欢

转载自blog.csdn.net/qq_40794602/article/details/80207090
今日推荐