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

详细版

语法
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’
正确例子:
string s1("Hello"),s2(8,'x'),s3;
s3.assign(s1);
s3.assign(s1,1,3);
string s;
s='n';
错误例子:
string error1='c';
string error2('u');
string error3=22;
string error4(8);
属性
length():获取长度
size():等价length()
empty():判断是否为空
capacity():获取当前容量
max_size():获取最大可容纳字符数
resize(n):重置长度为n
resize(n,ch):重置长度为n,填充字符ch
例子:
string s("hello");
cout<<s.length()<<s.size()<<s.empty()<<s.capacity()<<s.max_size();
s.resize(10);
s.resize(15,'a');
访问:
- s[pos]:下标访问,无越界检查
- at(pos):成员函数访问,越界抛异常
例子:
string s("Hello");
for(int i=0;i<s.length();i++)
cout<<s[i]<<s.at(i);
连接:
- +=:字符串拼接
- append(s):拼接s
- append(s,pos,n):拼接s从pos开始的n个字符
例子:
string s1("good "),s2("morning!");
s1+=s2;
s1.append(s2);
s2.append(s1,3,s1.size());
比较:
- 运算符:==、!=、<、<=、>、>=
- compare(s):与s比较
- compare(pos,n,s):从本串pos取n个与s比较
- compare(pos1,n1,s,pos2,n2):本串pos1取n1,s串pos2取n2比较
例子:
string s1("hello"),s2("hello"),s3("hell");
bool b=(s1==s2);
int f=s1.compare(s3);
子串:
substr(pos=0,n=npos):从pos开始取n个字符,n省略则取到末尾
例子:
string s1("hello world"),s2;
s2=s1.substr(4,5);
s2=s1.substr(4);
交换:
swap(s):交换两个string内容
例子:
string s1("hello"),s2("world");
s1.swap(s2);
查找:
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中字符末次出现
例子:
string s("hello worlld");
cout<<s.find("ll")<<s.rfind("ll")<<s.find_first_of("abcd");
删除:
erase(pos=0,n=npos):从pos删除n个字符,省略则删至末尾
例子:
string s("hello world");
s.erase(5);
s.erase(2,3);
替换:
replace(pos,n,str):从pos替换n个字符为str
例子:
string s("hello world");
s.replace(2,3,"haha");
插入:
insert(pos,str):pos位置插入str
insert(pos,str,subpos,sublen):pos插入str从subpos开始的sublen个字符
例子:
string s1("hello world"),s2("show");
s1.insert(5,s2);
s1.insert(2,s2,1,2);
类型转换:
c_str():转为const char*,末尾带’\0’
copy(buf,len,pos=0):从pos复制len个字符到buf
例子:
string s("hello");
printf("%s",s.c_str());
char p[6];
s.copy(p,5,0);
p[5]='\0';
输入输出:
cin>>s:流读取,遇空格停止
getline(cin,s):读取整行,包含空格
例子:
string s;
cin>>s;
getline(cin,s);
字符串流:
istringstream:字符串输入流
ostringstream:字符串输出流
例子:
string input("test 123");
istringstream in(input);
ostringstream out;
out<<input;