目录
前言
一:标准库的string类简介
1.string是basic_string的一份char类型的类模板
2.basic_string类模板的分类
3.string是表示字符串的字符串类
4.在使用string类时要添加头文件#include
二:string类的常用接口(只介绍常用的)
1.构造+析构+赋值重载
2.string类对象的容量操作
sting类中的resize和reserve
注意事项
3.string类对象的访问及遍历
[]方式访问
普通迭代器方式访问
const迭代器方式访问const对象
4.string类对象的修改操作
追加字符或字符串
查找+替换 +截取
c_str()返回c形式字符串,遇到'\0'就停下来
5.string类非成员函数
getline是用来读取有空格的一串字符串
使用形式如 string s; getline(cin,s);
接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧
前言
在日常中我们常常会使用字符串来表示一些数据,而在C语言中,字符串是以'\0'结尾的字符的集合,关于字符串的操作在c语言中有着各种str系列的库函数来处理字符串,但有时会因为误用而造成错误,且库函数多不易记住各库函数的的具体操作,因此在c++中提出了string类来解决各种字符串操作
一:标准库的string类简介
1.string是basic_string的一份char类型的类模板
2.basic_string类模板的分类
发展出不同的类模板 是为了适应各种不同的环境下的使用,比如要兼容各国的语言,字符串表示各国的语言等,就如编码一样,发展了各种的编码来适应各国的语言
最初的ASCII码
我们知道计算机只能识别机器语言,也就是二进制的,对于要在计算机中存储和表示英文就得有对应的转换,这就用到了ASCII码表将其对应的十进制数字表示为二进制的,存储在计算机中
为了兼容各国的语言与文字,便提出了万国码,将各国文字按照对应的转换数字用二进制存储在计算机中
常用的为UTF-8来转换各国文字
在国内为了更好的兼容,标识和存储汉字便提出了对于汉字的编码
3.string是表示字符串的字符串类
4.在使用string类时要添加头文件#include <string>
二:string类的常用接口(只介绍常用的)
1.构造+析构+赋值重载
举例:
2.string类对象的容量操作
注:在capacity计算中是不统计'\0'的
使用
sting类中的resize和reserve
1.我们需要了解在vs和g++等不同编译器的扩容情况
int main()
{
//观察扩容情况
string s;
size_t sz = s.capacity();
cout << "making s grow:\n";
cout << "capacity change:" << sz << endl;
for (int i = 0; i < 100; i++)
{
s.push_back('c');
if (sz != s.capacity())
{
sz = s.capacity();
cout << "capacity change:" << sz << endl;
}
}
return 0;
}
我们知道每次扩容的代价还是挺大的,要是异地扩容的话 ,还要不断的拷贝数据,释放原空间,代价增加,既然这样的话我们可以在知道需要开多少空间的情况下,使用reserve提前开辟空间,减少扩容,提高效率
int main()
{
//观察扩容情况
string s;
s.reserve(100);//提前扩容
size_t sz = s.capacity();
cout << "making s grow:\n";
cout << "capacity change:" << sz << endl;
for (int i = 0; i < 100; i++)
{
s.push_back('c');
if (sz != s.capacity())
{
sz = s.capacity();
cout << "capacity change:" << sz << endl;
}
}
return 0;
}
对于 resize
注意事项
1.clear()只是将string中有效字符清空,不会改变底层的空间大小
2.resize在改变元素个数时,如果增多元素个数,可能会改变底层容量的大小,如果减少元素个数,底层空间总大小不变
3.reserve为string预留空间,不改变有效元素个数,当参数小于底层空间总大小时,reserve不会改变容量大小
3.string类对象的访问及遍历
[]方式访问
普通迭代器方式访问
正向迭代器
简单理解迭代器 就是两个指针如
范围for遍历
string s3("hello world");
for (auto ch : s3)
{
cout << ch << " ";
}
cout << endl;
反向迭代器
const迭代器方式访问const对象
4.string类对象的修改操作
使用:
追加字符或字符串
查找+替换 +截取
对于上面的这个字符串空格替换还可以再优化为
c_str()返回c形式字符串,遇到'\0'就停下来
使用如cout<<s1.c_str()<<endl; cout<<s1<<endl;后面一个打印字符串的所有内容
5.string类非成员函数
以上几个只需了解即可,对于 getline需要注意