stl_string
Posted alexkk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stl_string相关的知识,希望对你有一定的参考价值。
string
使用string 必须包含头文件
并添加命名空间std
using namespace std;
1 string对象的创建和获取输入方式
#include<iostream>
#include<string>
int main()
{
//声明string 变量
std::string buff;
//方式一
std::cin>>buff;
//方式一
//getline(std::cin,buff);
std::cout<<buff<<std::endl;
return 0;
}
2 string类的成员函数汇总
函数名 | 功能 |
---|---|
构造函数 | 产生/复制字符串 |
析构函数 | 销毁字符串 |
= | 赋值 |
swap() | 交换两个字符串的内容 |
+=,append(),push_back() | 追加字符 |
insert(pos,const char*) | 插入字符 |
erase(pos,const char*) | 删除字符 |
clear() | 移除所有字符 |
resize() | 改变字符数量 |
replace(pos,n,s) | 用字符串s中的n个字符从pos位置开始替换 |
+ | 串联字符串 |
==,!=,<,<=,>=,compare() | 比较字符串 |
size(),length() | 返回字符串数量 |
max_size() | 返回字符的最大可能个数 |
empty() | 判断字符串是否为空 |
capacity() | 返回重新分配之前的字符容量 |
reserve() | 保留内存以存储一定数量的字符 |
[],at() | 存取单一字符 |
>>,getling() | 从stream中读取某值 |
<< | 将值写入stream中 |
copy() | 将内容复制为一个c-string |
c_str() | 将内容以c-string的形式返回 |
data() | 将内容以字符数组的形式返回 |
substr() | 返回子字符串 |
find() | 查找某子串或字符 |
begin(),end() | 提供正向迭代器支持 |
rbegin(),rend() | 提供逆向迭代器支持 |
get_allocated() | 返回配置器 |
2.1构造函数
string strs //生成空字符串
string s(str) //生成字符串str的复制品
string s(str, stridx) //将字符串str中始于stridx的部分作为构造函数的初值
string s(str, strbegin, strlen) //将字符串str中始于strbegin、长度为strlen的部分作为字符串初值
string s(cstr) //以C_string类型cstr作为字符串s的初值
string s(cstr,char_len) //以C_string类型cstr的前char_len个字符串作为字符串s的初值
strings(num, c) //生成一个字符串,包含num个c字符
strings(strs, beg, end) //以区间[beg, end]内的字符作为字符串s的初值
string str ("12345678");
char ch[ ] = "abcdefgh";
string a; //定义一个空字符串
string str_1 (str); //构造函数,全部复制
string str_2 (str, 2, 5); //构造函数,从字符串str的第2个元素开始,复制5个元素,赋值给str_2
string str_3 (ch, 5); //将字符串ch的前5个元素赋值给str_3
string str_4 (5,'X'); //将 5 个 'X' 组成的字符串 "XXXXX" 赋值给 str_4
string str_5 (str.begin(), str.end()); //复制字符串 str 的所有元素,并赋值给 str_5
//out
12345678
12345678
34567
abcde
XXXXX
12345678
2.2 获取字符串的长度
- size() 和 length():这两个函数会返回 string 类型对象中的字符个数,且它们的执行效果相同。
- max_size():max_size() 函数返回 string 类型对象最多包含的字符数,和具体的编译有关,一旦程序使用长度超过 max_size() 的 string 操作,编译器会拋出 length_error 异常。
- capacity():该函数返回在重新分配内存之前,string 类型对象所能包含的最大字符数,也和编译器有关
#include <iostream>
#include <string>
using namespace std;
int main ()
{
int size = 0;
int length = 0;
unsigned long maxsize = 0;
int capacity=0;
string str ("12345678");
string str_custom;
str_custom = str;
str_custom.resize (5);
size = str_custom.size();
length = str_custom.length();
maxsize = str_custom.max_size();
capacity = str_custom.capacity();
cout << "size = " << size << endl;
cout << "length = " << length << endl;
cout << "maxsize = " << maxsize << endl;
cout << "capacity = " << capacity << endl;
str_custom.resize(18);
str_custom.resize(33);
capacity = str_custom.capacity();
cout << "capacity = " << capacity << endl;
return 0;
}
//out
size = 5
length = 5
maxsize = 4294967295
capacity = 15
capacity = 60
2.3 获取字符串元素[],at()
- 下标操作符 [] 在使用时不检查索引的有效性,如果下标超出字符的长度范围,会示导致未定义行为。对于常量字符串,使用下标操作符时,字符串的最后字符(即 ‘ ‘)是有效的。对应 string 类型对象(常量型)最后一个字符的下标是有效的,调用返回字符 ‘ ‘。
- 函数 at() 在使用时会检查下标是否有效。如果给定的下标超出字符的长度范围,系统会抛出 out_of_range 异常
#include <iostream>
#include <string>
int main()
{
const std::string cS ("c.biancheng.net");
std::string s ("abode");
char temp =0;
char temp_1 = 0;
char temp_2 = 0;
char temp_3 = 0;
char temp_4 = 0;
char temp_5 = 0;
temp = s [2]; //"获取字符 'c'
temp_1 = s.at(2); //获取字符 'c'
temp_2 = s [s.length()]; //未定义行为,返回字符'