C++入门小馆: 深入string类

打印 上一主题 下一主题

主题 1607|帖子 1607|积分 4821

嘿,各位技能潮人!好久不见甚是缅怀。生存就像一场奥妙冒险,而编程就是那把超酷的全能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的passion。预备好和我一起冲进代码的奇幻宇宙了吗?Let's go!
  

  
  我的博客:yuanManGan
  我的专栏:C++入门小馆 C言雅韵集 数据布局漫游记  闲言碎语小记坊 题山采玉 明白算法真谛
  
  

目次
1.为什么我们要学习string类?
2.标准库中的string类
2.1string类(相识)
2.2 auto和范围for
auto 关键字:
范围for
2.3 string类的常用接口说明
1. string类对象的常见构造
2. string类对象的容量操纵
3. string类对象的访问及遍历操纵
4. string类对象的修改操纵
5. string类非成员函数




我们学习一个类或者STL,都要经历几个过程,先相识一个类怎么使用,相识里面最常用的接口,相识一个类的底层怎么实现的,根据自己的理解优化改造类。一样平常能到第二部就很不错了。
1.为什么我们要学习string类?

回想一下我们在c语言中怎么存储字符串呢?没错就是字符数组,还提供了很多关于str的库函数但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户 自己管理,稍不留意大概还会越界访问。
2.标准库中的string类

2.1string类(相识)

   string类的文档先容   这个网站有很多类的库函数的使用和实例,可以收藏起来,但这个网站,并不是C++官方的网站,而是几个有志青年觉得官网并不好,而做出来的网站。  

2.2 auto和范围for

    在C++11中多了两个功能,一个是auto关键字,一个是范围for。   auto 关键字:

   auto关键字用来作为一个新的范例标识符,可以用auto来声明变量,auto声明的变量必须由编译器推导而来。简而言之auto用来声明的变量会主动匹配你给的右值的范例。
  

  好比这个x变量的范例就是int范例。
  当我们想用auto来主动匹配指针范例时我们使用auto和auto*是一个意思,没有区别,但我们用auto声明引用范例时必须加&。
  

  

  auto不能作为函数的参数,可以做返回值,但建议谨慎使用
  

   

我们使用auto声明变量时,必须要举行初始化

如果使用auto一次声明多个变量时,变量的范例必须同等。

auto范例不能声明数组变量

有人问了这个有什么用啊,我自己知道变量范例,那我用这个干嘛啊,不要紧我们学到后面又它的用武之地,我们不要因为自己学习的不敷深入就否定这个玩意。
范围for

范围for的作用是对一个有范围的集合举行遍历,用法是for(范例 变量 : 集合),第一部分也就是冒号前面的是用于迭代的变量,第二部分则是范围。
范围for可以对数组和容器对象举行遍历:

2.3 string类的常用接口说明

注意下面我只讲解最常用的接口)
1. string类对象的常见构造

           (constructor)      函数名称                 功能说明      
           string()       (重点)                 构造空的      string      类对象,即空字符串      
           string(const char* s)       (重点)                                        C-string      来构造      string      类对象      
           string(size_t n, char c)                 string      类对象中包含      n      个字符      c      
           string(const string&s)       (重点)                                  拷贝构造函数      

当然string范例我们对它的<<运算符也举行了重载。
2. string类对象的容量操纵

   
函数名称功能说明
size(重点)             返回字符串有效字符长度      
length返回字符串有效字符长度
             capacity       返回空间总大小
             empty        (重点)       查抄字符串是否为空串,是返回true,不是返回false
             clear        (重点)       清空有效字符
             reserve        (重点)       为字符预留空间
             resize        (重点)       将有效字符个数改为n个,多余的字符用c填充
  有心细的宝宝发现length和size的功能是一样的,然后它的底层实现着实也是一样的。length是由于汗青的缘故起因,string存在的汗青很久,然后为了和STL里面的类的保持同等所以有了size,后者更常用一点。
  前三个
  

  empty,clear:
 reserve

这里扩容的规则,以后再慢慢讲。
resize

这里resize之后的s后面全是'\0' 。

注意:
clear只是将string中的有效字符打扫,不改变底层空间大小。
resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不 同的是当字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的元素空间。注意:resize在改变元素个数时,如果是将元素个数 增多,大概会改变底层容量的大小,如果是将元素个数减少,底层空间总大小稳固。
   reserve(size_t res_arg=0)  :为  string  预留空间,不改变有效元素个数,当  reserve  的参     数小于  string  的底层空间总大小时,  reserver  不会改变容量大小。   3. string类对象的访问及遍历操纵

           函数名称                 功能说明      
           operator[]      (重                 点)                 返回      pos      位置的字符,      const string      类对象调用      
           begin      +       end                 begin      获取一个字符的迭代器       +       end      获取最后一个字符下一个位                 置的迭代器      
           rbegin       +       rend                 begin      获取一个字符的迭代器       +       end      获取最后一个字符下一个位                 置的迭代器      
           范围      for                 C++11      支持更简便的范围      for      的新遍历方式      

这里就可以使用auto来声明就很惬意 。
4. string类对象的修改操纵

   
             函数名称                    功能说明      
push_back 在字符串后面加个字符c
append 在字符串后面追加一个字符串
operator+=在字符串后可追加字符或者字符串
c_str返回C格式字符串
find + npos从字符串pos位置开始找字符c,返回该字符在字符串中的位置
rfind 从字符串pos位置开始反着找。
substr在str中从pos位置开始,截取n个字符,然后将其返回
     push_back      
         append         
       operator+=      
       c_str      
         find      
         substr      
         1.    在   string   尾部追加字符时,   s.push_back(c) / s.append(1, c) / s += 'c'   三种的实现方式差        不多,一样平常环境下   string   类的   +=   操纵用的比较多,   +=   操纵不但可以连接单个字符,还可        以连接字符串。        2.    对   string   操纵时,如果可以大概大概预估到放多少字符,可以先通过   reserve   把空间预留       好。       更加具体,更加详细的讲解在文档里,可以自己查阅,这里就不逐一赘述了。     5. string类非成员函数

  
函数功能说明
operator>>输入运算符重载
operator<<输入运算符重载
getline获取一行字符串
operator+只管少用,因为传值返回,导致深拷贝服从低
relational operator大小比较
  

  我们发现我们输入空格或者换行时,cin就会停止读取,那我们真的想要读取空格字符该怎么办呢?这是就该我们的getline出场了。
 

getline函数有两个重载,第一个参数都是输入流,即cin,第二个参数是string范例,第三个参数就重要了,如果不传的话就是默认'\n'换行,你也可以指定结束字符。
 






















免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表