[STL] string的常见用法

来源:互联网 发布:ubuntu命令行模式乱码 编辑:程序博客网 时间:2024/05/16 20:28

头文件: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
原创粉丝点击