string库

String库

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

[TOC]

思维导图

简略版

详细版

21aca11046d859a79cf3b2bebb308dfb

语法

  • string类要包含头文件 #include

  • string是一个模板类定义如下:

    typedef basic_string<char> string;

初始化&赋值:

  1. 构造初始化:string s1(“Hello”); string s2(8,‘x’); string s3=“March”; string s4;

  2. assign(s):全串赋值

  3. assign(s,pos,n):从s的pos位置取n个字符赋值

  4. 单字符赋值:s=‘a’

正确例子:

1
2
3
4
5
string s1("Hello"),s2(8,'x'),s3;
s3.assign(s1);
s3.assign(s1,1,3);
string s;
s='n';

错误例子:

1
2
3
4
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
例子:

1
2
3
4
string s("hello");
cout<<s.length()<<s.size()<<s.empty()<<s.capacity()<<s.max_size();
s.resize(10);
s.resize(15,'a');

访问:

  1. s[pos]:下标访问,无越界检查
  2. at(pos):成员函数访问,越界抛异常
    例子:
1
2
3
string s("Hello");
for(int i=0;i<s.length();i++)
cout<<s[i]<<s.at(i);

连接:

  1. +=:字符串拼接
  2. append(s):拼接s
  3. append(s,pos,n):拼接s从pos开始的n个字符
    例子:
1
2
3
4
string s1("good "),s2("morning!");
s1+=s2;
s1.append(s2);
s2.append(s1,3,s1.size());

比较:

  1. 运算符:==、!=、<、<=、>、>=
  2. compare(s):与s比较
  3. compare(pos,n,s):从本串pos取n个与s比较
  4. compare(pos1,n1,s,pos2,n2):本串pos1取n1,s串pos2取n2比较
    例子:
1
2
3
string s1("hello"),s2("hello"),s3("hell");
bool b=(s1==s2);
int f=s1.compare(s3);

子串:

substr(pos=0,n=npos):从pos开始取n个字符,n省略则取到末尾
例子:

1
2
3
string s1("hello world"),s2;
s2=s1.substr(4,5);
s2=s1.substr(4);

交换:

swap(s):交换两个string内容
例子:

1
2
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中字符末次出现
例子:

1
2
string s("hello worlld");
cout<<s.find("ll")<<s.rfind("ll")<<s.find_first_of("abcd");

删除:

erase(pos=0,n=npos):从pos删除n个字符,省略则删至末尾
例子:

1
2
3
string s("hello world");
s.erase(5);
s.erase(2,3);

替换:

replace(pos,n,str):从pos替换n个字符为str
例子:

1
2
string s("hello world");
s.replace(2,3,"haha");

插入:

insert(pos,str):pos位置插入str
insert(pos,str,subpos,sublen):pos插入str从subpos开始的sublen个字符
例子:

1
2
3
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
例子:

1
2
3
4
5
string s("hello");
printf("%s",s.c_str());
char p[6];
s.copy(p,5,0);
p[5]='\0';

输入输出:

cin>>s:流读取,遇空格停止
getline(cin,s):读取整行,包含空格
例子:

1
2
3
string s;
cin>>s;
getline(cin,s);

字符串流:

istringstream:字符串输入流
ostringstream:字符串输出流
例子:

1
2
3
4
string input("test 123");
istringstream in(input);
ostringstream out;
out<<input;