STL顺序容器之字符串

来源:互联网 发布:dnf客户端源码 编辑:程序博客网 时间:2024/05/16 23:52

头文件 #include <string>

定义

string对象的定义和初始化以及读写
string s4(n,'c'); 将s4 初始化为字符'c'的n个副本
getline(cin,s6); 读取字符到遇到换行,空格可读入,直到‘\n’结束,
getline(cin,s7,'a'); 一个直到‘a’结束,其中任何字符包括'\n'都能够读入

string s("avcde",3); 则s读入到第3个字符,即s中为avc

string s("avcdd",2,2);则s读入从第2个字符起后两个字符,即s中为cd

属性

capacity();容器大小

vs2005默认容量为15个,以后以16为单位增加

vc 6.0 默认容量为31个,以后以32为单位增加

reserve();设置容器大小(只能变大,不能变小)

length(); 字符串长度

size();字符串大小,与length()作用基本相同,返回值类型为无符号整形size_t

resize();设置字符串大小

输出

c_str(); 即字符串

at(); 同下标访问运算符类似,越界时会异常而不会崩溃,可以处理

修改

插入

string a("abcdefg");
string b("ab");

char* c="ab";

insert(1,"ab") 在字符串下标1位置插入字符串ab

insert(1,c) 在字符串下标1位置插入字符数组c

insert(1,b,0,2);在字符串下标1位置插入string 类b 的从下标为0字符起后两个字符(包括下标为0)截取的字符串

insert(1,c,2); 插入字符数组c的前两个字符

insert(1,5,'o');在字符串下标1位置插入5个o

insert(1,str1.begin(),str1.end()) 给首地址和尾地址+1插入一段也是可以的

尾巴插入(拼接)

append函数 用法与insert基本相同

append(str1.begin(),str1.end()) 给首地址和尾地址+1拼接一段也是可以的

重新赋值

assign函数 用法与insert基本相同

操作函数

比较

compare(str),大于返回1,小于返回-1,等于返回0

string a("abcdefg");

a.compare(0,1,"abgdfdf") 从第0位置截取长度为1字符串与目标字符串比较,若相等则,返回0

a.compare(0,1,"abgdfdf",0,1) 从第0位置截取长度为1字符串与目标字符串从第0位置截取长度为1字符串比较,若相等则返回0。

复制

    string a("dfdf");
    char b[6]={0};

    a.copy(b,2,0);

string类从索引0开始两个字符复制到char数组中,返回值为字符个数,结果为“df”。

查找

find函数 可找字符串和字符

string a("dfdf");

a.find("df"),返回索引,结果为0

a.find("df",1)从索引1开始,结果为2

a.find("d",1)从索引1开始,结果为2

未找到则返回4294967295(无符号整型,可用int强转为-1)

返回字串

substr函数

a.substr(1,3)从索引1开始,取长度为3的字符,结果为fdf

交换

swap函数

a.swap(b),则a与b交换

迭代器

string::iterator ite; 迭代器就像一个智能指针

相当于char* 的指针或其他类型的指针

begin函数返回一个迭代器,指向字符串的第一个元素

end函数返回一个迭代器,指向字符串的末尾(最后一个字符的下一个位置)

注意:下标运算时ite需要指向头

迭代器的失效

当字符串重新申请空间时失效,需要重新操作。

删除

erase函数,删除指定元素

string str("abcdef");

str.erase(str.begin()+1); 得到acdef

两个参数为删除一段元素

str.erase(str.begin()+2,str.begin()+4); 得到abef

相关算法

需要头文件#include<algorithm>

遍历

for_each

第三个参数可有可无,是对数据的操作

示例: 

void fun(char c)    容器中是什么,就是什么类型(不能是迭代器)
{
    cout<< c;
}
void FunForeach()
{
    string str("qwerrwgjkj");

    for_each(str.begin(),str.end(),fun);
}

排序

sort函数

示例:sort(str.begin(),str.end());

从大到小排序

greater函数

头文件#include<functional>

sort(str.begin(),str.end(),greater<char>());   容器中是什么,就是什么类型

原创粉丝点击