当前位置:   article > 正文

C++修炼之路之string--标准库中的string_string类型的头文件

string类型的头文件

目录

前言 

一:标准库的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++等不同编译器的扩容情况

  1. int main()
  2. {
  3. //观察扩容情况
  4. string s;
  5. size_t sz = s.capacity();
  6. cout << "making s grow:\n";
  7. cout << "capacity change:" << sz << endl;
  8. for (int i = 0; i < 100; i++)
  9. {
  10. s.push_back('c');
  11. if (sz != s.capacity())
  12. {
  13. sz = s.capacity();
  14. cout << "capacity change:" << sz << endl;
  15. }
  16. }
  17. return 0;
  18. }

我们知道每次扩容的代价还是挺大的,要是异地扩容的话 ,还要不断的拷贝数据,释放原空间,代价增加,既然这样的话我们可以在知道需要开多少空间的情况下,使用reserve提前开辟空间,减少扩容,提高效率

  1. int main()
  2. {
  3. //观察扩容情况
  4. string s;
  5. s.reserve(100);//提前扩容
  6. size_t sz = s.capacity();
  7. cout << "making s grow:\n";
  8. cout << "capacity change:" << sz << endl;
  9. for (int i = 0; i < 100; i++)
  10. {
  11. s.push_back('c');
  12. if (sz != s.capacity())
  13. {
  14. sz = s.capacity();
  15. cout << "capacity change:" << sz << endl;
  16. }
  17. }
  18. return 0;
  19. }

对于 resize

注意事项 

1.clear()只是将string中有效字符清空,不会改变底层的空间大小

2.resize在改变元素个数时,如果增多元素个数,可能会改变底层容量的大小,如果减少元素个数,底层空间总大小不变

3.reserve为string预留空间,不改变有效元素个数,当参数小于底层空间总大小时,reserve不会改变容量大小

3.string类对象的访问及遍历

[]方式访问

 

普通迭代器方式访问 

正向迭代器

简单理解迭代器 就是两个指针如

 

 范围for遍历

  1. string s3("hello world");
  2. for (auto ch : s3)
  3. {
  4. cout << ch << " ";
  5. }
  6. cout << endl;

反向迭代器

 

 

 

const迭代器方式访问const对象

4.string类对象的修改操作 

 

 

 使用:

追加字符或字符串

查找+替换 +截取

 

对于上面的这个字符串空格替换还可以再优化为 

 

 

 c_str()返回c形式字符串,遇到'\0'就停下来

使用如cout<<s1.c_str()<<endl;   cout<<s1<<endl;后面一个打印字符串的所有内容

5.string类非成员函数

 

以上几个只需了解即可,对于 getline需要注意

getline是用来读取有空格的一串字符串
使用形式如 string s;   getline(cin,s);
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/736049
推荐阅读
相关标签
  

闽ICP备14008679号