C++入门之stl六大组件--String库函数的介绍

本文详细介绍了C++标准库中的string类,包括其作为字符串容器的优势,如自动内存管理,以及各种构造函数、容量操作、访问和遍历方法。此外,还提到了string类的修改操作,如追加字符、查找和截取子串,以及非成员函数,如输出和输入重载。文章强调了使用string类在处理字符串时的便利性和安全性。
摘要由CSDN通过智能技术生成

文章目录

一、为什么学习string类

1.C语言中的字符串

二、标准库中的string类

1.string类

2.string类的常用接口

1.string类对象的常见构造

2.string类对象的容量操作

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

4.string类对象的修改操作

5.string类的非成员函数

总结

 


一、为什么学习string类

1.C语言中的字符串

C语言中,字符串是以\0结尾的一些字符集合,为了操作方便,C库中提供了一些str系列的库函数,但是这些库函数是与字符串分离开的,不太符合oop的思想,而且底层空间需要用户自己管理,如果不注意可能会访问越界。

二、标准库中的string类

1.string类

在使用string类的时候,必须包含#include头文件以及using namespace std;

1.string类是表示字符串的字符串类

2.该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作

3.string再底层实际是:basic_string模板类的别名

4.不能操作多字节或者变长字符的序列

2.string类的常用接口

1.string类对象的常见构造

函数名称功能说明
string()无参构造,构造空的string类对象,即空字符串
string(const char *s)用c-string来构造string类对象
string(const string&s)拷贝构造,传入一个string类
string(size_t n,char c)string类对象中包含n个字符c

使用方法:

string s1; //构造一个空的string类对象s1
string s2("hello string"); // 用c字符串构造string类对象s2
string s3(s2) //拷贝构造s3

2.string类对象的容量操作

函数名称功能说明
size返回字符串有效字符长度
length返回字符串有效字符长度,作用同size
capacity返回空间总大小
empty检测字符串释放为空串,是返回true,否则返回false
clear清除有效字符,但是不改变底层空间的大小
reserve为字符串预留空间
resize将有效字符个数改成n个,多出的空间用字符c填充

使用方法:

void test()
{
    string s("hello cplusplus");
    cout<<s.size()<<endl;
    cout<<s.capacity<<endl;
    
    //将s中的字符串清空,清空只是将size清0,不改变底层空间的大小
    s.clear();
    
    //将s中的有效字符增加到20个,多出位置用'a'填充
    s.resize(20,'a');

    
    //将s中有效字符增加到15个,多出位置用缺省值\0填充
    
    s.resize(15);

    string s1;
    
    s1.reserve(100); 
}
  • 使用reserve的情况:可以预留n个空间,避免扩容带来的开销。当reserive参数小于string的底层空间总大小时,reserver不会改变容量的大小

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

函数名称功能说明
operator[]返回pos位置的字符,const string类对象调用
begin+endbegin获取一个 字符的迭代器+end获取最后一个字符的下一个位置的迭代器
rbegin+rendrbegin获取最后一个字符的下一个位置的迭代器+rend获取第一个字符的迭代器
范围for一种语法糖,c++11中新的遍历方式

使用方法:

void test()
{
    string s("hello cplusplus");
    
    //1.for+operator[]
    for(int i = 0; i<size;++i)
    {
        cout<<s[i]<<endl;
    }

    //2.迭代器  暂时可以将迭代器看成一个指针
    string::iterator it = s.begin();
    while(it!=s.end())
    {
        cout<<*it<<endl;
        ++it;
    }

    //反向迭代器rbegin
    auto rit = s.rbegin();
    while(rit!+s.rend())
    {
        cout<<*rit<<endl;
        ++rit;
    }

    //3.范围for 底层也是用的迭代器
    for(auto ch:s)
    {
        cout<<ch<<end;
    }

4.string类对象的修改操作

函数名称功能说明
push back在字符串后面增加一个字符
append在字符串后面增加一个字符串
operator+=在字符串后面增加一个字符串str
c str返回c格式的字符串
find+npos从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置。npos是string里的一个静态成员变量,默认值为-1
rfind从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置
substr在str中从pos位置开始,截取n个字符,然后将其返回

使用方法:

void test()
{
    string str("hello");
    str.push_back(' '); //追加一个空格
    str.append("world");
    str +='b';
    str += 'it';


    //通过rfind获取file的后缀 从后往前找
    string file("test.cpp");
    size_t pos = file.rfind('.');
    string suffix(file.substr(pos,file.size()-pos)); //获取后缀给suffix 获取子串,从pos位置向后找,找size-pos个长度 
    
    
       //取出url的域名
      //协议+ 域名 + 资源
      string url("http://www.cpluplus.com/reference/string/string/find/");
      size_t start = url.find("://");
      if(start == npos)
        return ; //无效域名
      start+= 3;
      size_t finish = url.find('/',start);  
      string address = url.substr(start,finsh - start); //取出中间的子串

}
    

5.string类的非成员函数

函数功能说明
operator+使用传值返回,深拷贝效率较低
operator>>输入运算符重载
operator<<输出运算符重载
getline获取一行字符串
relational operators大小比较

总结

本章主要介绍了string类以及string类的一些接口函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值