string库

string库
flowwalkerString库
s.find('a')返回的是位置下标(std::string::size_type,无符号整数),而std::find(s.begin(), s.end(), 'a')返回的是迭代器。整数和迭代器类型不匹配,不能用==比较。
[TOC]
思维导图
简略版

详细版

语法
string类要包含头文件 #include
string类是一个模板类定义如下:
typedef basic_string<char> string;
初始化&赋值:
构造初始化:string s1(“Hello”); string s2(8,‘x’); string s3=“March”; string s4;
assign(s):全串赋值
assign(s,pos,n):从s的pos位置取n个字符赋值
单字符赋值:s=‘a’
正确例子:
1 | string s1("Hello"),s2(8,'x'),s3; |
错误例子:
1 | string error1='c'; |
属性
length():获取长度
size():等价length()
empty():判断是否为空
capacity():获取当前容量
max_size():获取最大可容纳字符数
resize(n):重置长度为n
resize(n,ch):重置长度为n,填充字符ch
例子:
1 | string s("hello"); |
访问:
- s[pos]:下标访问,无越界检查
- at(pos):成员函数访问,越界抛异常
例子:
1 | string s("Hello"); |
连接:
- +=:字符串拼接
- append(s):拼接s
- append(s,pos,n):拼接s从pos开始的n个字符
例子:
1 | string s1("good "),s2("morning!"); |
比较:
- 运算符:==、!=、<、<=、>、>=
- compare(s):与s比较
- compare(pos,n,s):从本串pos取n个与s比较
- compare(pos1,n1,s,pos2,n2):本串pos1取n1,s串pos2取n2比较
例子:
1 | string s1("hello"),s2("hello"),s3("hell"); |
子串:
substr(pos=0,n=npos):从pos开始取n个字符,n省略则取到末尾
例子:
1 | string s1("hello world"),s2; |
交换:
swap(s):交换两个string内容
例子:
1 | string s1("hello"),s2("world"); |
查找:
find(str,pos=0):从pos开始从前查找str
rfind(str,pos=npos):从pos开始从后查找str
find_first_of(str,pos=0):查找str中任意字符首次出现
find_last_of(str,pos=npos):查找str中任意字符末次出现
find_first_not_of(str,pos=0):查找非str中字符首次出现
find_last_not_of(str,pos=npos):查找非str中字符末次出现
例子:
1 | string s("hello worlld"); |
删除:
erase(pos=0,n=npos):从pos删除n个字符,省略则删至末尾
例子:
1 | string s("hello world"); |
替换:
replace(pos,n,str):从pos替换n个字符为str
例子:
1 | string s("hello world"); |
插入:
insert(pos,str):pos位置插入str
insert(pos,str,subpos,sublen):pos插入str从subpos开始的sublen个字符
例子:
1 | string s1("hello world"),s2("show"); |
类型转换:
c_str():转为const char*,末尾带’\0’
copy(buf,len,pos=0):从pos复制len个字符到buf
例子:
1 | string s("hello"); |
输入输出:
cin>>s:流读取,遇空格停止
getline(cin,s):读取整行,包含空格
例子:
1 | string s; |
字符串流:
istringstream:字符串输入流
ostringstream:字符串输出流
例子:
1 | string input("test 123"); |










