[STL] string的常见用法

头文件:string(不是string.h,这是两个不同的头文件)
在std命名空间内(using namespace std;)

string的定义

string str;
也可以直接初始化:
string str = “Hello World!”

注:要读入和输出整个字符串,必须使用cin和cout。

string中内容的访问

通过下标访问

str[i]

c_str()可以将string类型转换成char[]类型输出,eg:

#include<iostream>
#include<string>

using namespace std;

int main(){
    string str = "abcdef";
    printf("%s\n",str.c_str());

    return 0;
}

通过迭代器访问

一般通过下标访问就可以满足访问要求,但是有些函数,比如insert()和erase()则要求以迭代器为参数。

string的迭代器不需要参数:
string::iterator it;

这样就可以通过*it访问string中的每一位:

#include<iostream>
#include<string>

using namespace std;

int main(){

    string str = "abcdef";

    for(string::iterator it = str.begin(); it != str.end(); it++){
        printf("%c",*it);
    }

    return 0;
}

注:string的迭代器支持进行加减某个数的操作,例如str.begin()+5是可行的。

string常用函数

1. operator +=

字符串拼接

2. compare operator

==、!=、<、<=、>、>=,按字典序排

3. length() / size()

返回string的长度,即存放的字符数

4. insert()

insert()函数有很多种写法,记录几种常见写法:

(1) insert(pos, string) :在pos号位置插入字符串string
(2)insert(it, it2, it3):it为原字符串的插入为止,it2和it3为待插字符串的首位迭代器,eg:

#include<iostream>
#include<string>

using namespace std;

int main(){

    string str = "abcxyz", str2 = "opq"; //str为原字符串,str2为待插字符串
    //在str的3号位置(c和x之间)插入str2
    str.insert(str.begin()+3, str2.begin(), str2.end());
    cout << str << endl; 

    return 0;
}

5. erase()

erase()有两种用法:删除单个元素、删除一个区间内的元素。

(1)删除单个元素:str.erase(it)

#include<iostream>
#include<string>

using namespace std;

int main(){

    string str = "abcxyz";
    str.erase(str.begin()+3); //删除了x 
    cout << str << endl;

    return 0;
}

(2)删除一个区间内的元素
有两种方法。

(2a) str.erase(first, last),first为需要删除区间的起始迭代器,last为需要删除的区间的末尾迭代器的下一个地址,即[first, last)。

(2b) str.erase(pos, length),pos为要开始删除的起始位置,length为删除字符个数。

6. clear()

clear()用以清空string中的数据

#include<iostream>
#include<string>

using namespace std;

int main(){

    string str = "abcxyz";
    cout << str.length() << ' ' << str << endl;
    str.clear(); //删除了x 
    cout << str.length() << ' ' << str << endl;

    return 0;
}

7. substr()

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

8. string::npos

string::npos是一个常数,其本身的值为-1,但由于是unsigend_int类型,因此实际上也可以认为是unsigend_int类型的最大值。
string::npos用以作为find函数失配使的返回值。

9. find()

(9a) str.find(str2),当str2是str的子串时,返回str2在str中第一次出现的位置;如果str2不是str的子串,返回string::npos。

(9b) str.find(str2, pos),从str的pos位开始匹配str2,返回值同上。

10. replace()

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

(10b) str.replace(it1, it2, str2),把str的迭代器[it1, it2)范围内的子串替换为str2。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值