C++学习记录-STL-string

一、string构造函数

  • string() :创建一个空字符串

    1
    string str;
  • string(const char *s)

    1
    2
    char arr[10] = "abcdegjki" ;
    string a(arr);
  • string(const string& str)

    1
    2
    string a;
    string b(a);
  • string(int n,char c)

    1
    string c(10, 'a');//创建一个字符串,内容为aaaaaaaaaa

二、赋值操作

除了 =之外,还有assign()

  • string& assign(const char *s) //把字符串s赋给当前字符串

    1
    2
    3
    char arr[10] = "abcdegjki" ;
    string astr;
    astr.assign(arr);
  • string& assign(const char *s,int n) //把字符串s的前n个字符赋给当前字符串

    1
    2
    3
    4
    5
    6
    char arr[10] = "abcdegjki" ;
    string astr;

    astr.assign(arr,5);//把abcde赋值给astr

    cout <<astr;
  • string& assign(const string &s) //把字符串s赋给当前字符串

    1
    2
    3
    4
    string astr;

    string bstr;
    bstr.assign(astr);
  • string& assign(int n,char c) //用n个字符c赋给当前字符串

    1
    2
    string astr;
    astr.assign(10,'w');

三、字符串拼接

  • string& append(const char *s) //把字符串s连接到当前字符串末尾

  • string& append(const char *s,int n) //把字符串s的前n位连接到当前字符串的末尾

  • string& append(const string &s)

  • string& append(const string &s,int pos,int n) //把字符串s从pos位置开始的n个字符连接到当前

    ​ 字符串的末尾

    1
    2
    3
    string s="abcdefg";
    string a="aaa";
    a.append(s,1,3);//此时a为:aaabcd

四、字符串查找

语法:字符串名.find() //从第一位开始找

​ 字符串名.rfind() //从最后一位开始找

​ 返回的是所在的位置,若返回-1则表示找不到

示例:

1
2
3
4
5
6
string a = "abcdededef";
int x=a.find("de", 5);
//从a中下标为5的元素开始查找“de”。最后x=5

int y=a.find("ade",0,1);
//从a中下标为0的元素开始,查找“ade”的前1个字符即‘a’,结果为0

五、字符串的比较

语法:字符串名.compare(与比较的字符串);

按字符串各字符的ASCII码的大小按顺序进行比较

  • 相等:返回0
  • 大于:返回1
  • 小于:返回-1
1
2
3
string a = "abcdededef";
int x = a.compare("ABC");
//结果为1

六、字符串中子串的获取

字符串名.at(int n) //获取下标为n的字符

1
2
3
string a = "abcdededef";
char x = a.at(0);
//x为'a'

字符串名.substr(int pos=0,int n=npos); //获取由pos开始的n个字符组成的子串

1
2
3
string a = "abcdededef";
string b = a.substr(1, 5);
//b为“bcded”

七、字符串的替换、插入、删除

字符串的替换:

字符串名.replace(int pos,int n,string &s) //从下标为pos的n个字符替换为s

字符串名.replace(int pos,int n,char *a) //从下标为pos的n个字符替换为a

示例:

1
2
3
string a = "abcdededef";
a.replace(2, 3, "HAHA");
//a变为“abHAHAdedef”

字符串的插入:

字符串名.insert(int pos,const string &s) //在下标为pos处插入字符串s (s的开头为下标pos)

字符串名.insert(int pos,const char *a) //在下标为pos处插入字符串a (a的开头为下标pos)

字符串名.insert(int pos,int n,char c) //在下标为pos后插入n个c

示例:

1
2
3
string a = "abcdededef";
a.insert(1, "HA");
//结果为“aHAbcdededef”

字符串的删除:

字符串名.erase(int pos,int n) //从下标为pos开始删除n个字符

示例:

1
2
3
string a = "abcdededef";
a.erase(1, 3);
//a的结果为“aededef”

整体示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include<iostream>
#include<string>
using namespace std;
//string容器的基本用法


int main()
{
//string的初始化
char p[] = "a string";
string a = "Hello World";
string b(a);//用a初始化b
string c(20, '7');//用20个7初始化c
string d(p);//利用字符数组p来初始化d

//string的赋值
b.assign(c);//将c赋值给b,也可以用等于号"="
b.assign(p);//将字符数组p赋值给b

//string获取字符
char x = b.at(0);//通过at()来获取字符串中的字符
a = b[0];

//string的拼接
b += c;
b.append(c);//将c连接到b后面
b.append(c, 2);//将c的前两个字符连接到b的后面
b.append(c, 2, 3);//将c的第2个位置起的三个字符连接到b后面
b.append(20,'c');//将20个c添加到b后面

//string的查找
b.find('a');//在b里查找a这个字符,返回第一个出现的位置
b.find('a', 2);//从第2个位置开始查找
b.find("hello");//在b里查找子串
b.rfind('a');//在b里查找a字符最后一次出现的位置
b.rfind("hello");//在b里查找hello这个字串最后一次出现的位置

//string的替换
b.replace(2, 5, "hello");//从第二个位置开始的5个位置替换为hello
b.replace(2, 5, p);

return 0;
}