STL之string

在C语言中,一般使用字符数组char str[]来存放数组

但是使用字符数组有时会显得操作麻烦

而且容易因经验不足而产生一些错误

因此为了更方便地对字符串进行操作

c++在STL中加入了string类型

对字符串的需求功能进行了封装

使得操作更方便,不易出错

但是如果要使用string

必须加上#include<string>

using namespace std;(与string.h不同)

1、string的定义

string str(直接加变量名)

初始化

(直接赋值)

string str="abcd"

2、string中内容的访问

①通过下标访问

(像字符数组一样)

如果要输入和输出,只能用cin和cout

tips:用c_str()将string类型转换为字符数组进行输出即可用printf

printf("%s\n",str.c_str());

②通过迭代器访问

譬如insert()、erase()这些函数要求以迭代器为参数进行访问

由于string不像其他STL容器那样需要参数,因此可以直接如下定义:

string::iterator it;

#include<stdio.h>
#include<string>
using namespace std;
int main()
{
    string str="abcd";
    for(string::iterator it=str.begin();it!=str.end();it++)
    {
        printf("%c",*it);
    }
    return 0;
}

string和vector一样,支持直接对迭代器进行加减某个数字

如str.begin()+3是可行的

3、string常用函数

①operator+=

这是string的加法

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str1="abc",str2="xyz",str3;
    str3=str1+str2;
    str1+=str2;
    cout<<str1<<endl;
    cout<<str3<<endl;
    return 0;
}

②compare operator

两个string类型可以直接使用=、!=、<、<=、>、>=比较大小

比较规则是字典序

③length()/size()

length()返回字符串的长度

即存放的字符数

与size()基本相同

④insert()

a.insert(pos,string)

在pos号位置插上字符串string

e.g. str.insert(3,str2);//往str[3]处插入str2

b.insert(it,it2,it3)

it为原字符串的欲插入位置,it2和it3为待插字符串的首尾迭代器

用来表示[it2,it3)将被插在it的位置上

⑤erase()

a.删除单个元素

str.erase(it)用于删除单个元素,it为需要删除的元素的迭代器

str.erase(str.begin()+4);

b.删除一个区间内的所有元素

     一、str.erase(first,last)

           str.erase(str.begin()+2,str.end()-1)

     二、str.erase(pos,length)

           pos为需要开始删除的起始位置,length为删除的字符个数

⑥clear()

str.clear()

清空

⑦substr()

substr(pos,len)返回从pos号位开始、长度为len的子串

⑧string::npos

是一个常数,其本身的值为-1

但由于是unsigned_int类型

因此实际上也可以认为是unsigned_int类型的最大值

string::npos用以作为find函数失配时的返回值

⑨find()

str.find(str2),当str2是str的字串时,返回其在str中第一次出现的位置;

如果str2不是str的字串

那么返回string::npos

str.find(str2,pos),从str的pos号位开始匹配str2,返回值与上相同

⑩replace()

str.replace(pos,len,str2)把str从pos号位开始、长度为len的子串替换为str2

str.replace(it1,it2,str2)把迭代器[it1,it2)范围的字串替换为str2

猜你喜欢

转载自blog.csdn.net/qq_42232118/article/details/81735850
今日推荐