STL—string(一)

简介: 我们在C语言中,存储字符数组是用char str[]来存放字符串,但是用这个存储的时候一般会显得麻烦,还容易产生一些错误,C++在STL中加入了string类型,使得操作起来更加的方便要使用string,需要添加头文件#include <string>

文章目录

一、什么是string

二、string的操作

1.string的定义

2.string中内容的访问

(1)通过下标访问

(2)通过迭代器访问

3.string中的函数

(1)operator+=

(2)compare operator

(3)length()/size()

(4)insert()

(5)erase()

(6)clear()

(7)substr()

(8)string::npos

(9)find()

(10)replace()


一、什么是string

我们在C语言中,存储字符数组是用char str[]来存放字符串,但是用这个存储的时候一般会显得麻烦,还容易产生一些错误,C++在STL中加入了string类型,使得操作起来更加的方便


要使用string,需要添加头文件#include <string>


二、string的操作

1.string的定义

定义string的方式跟基本类型相同:

string str;

初始化:

string str = "abcd";

2.string中内容的访问

(1)通过下标访问

可以像字符数组那样去访问string

str.length();为str的长度

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str = "abcd";
    for (int i = 0; i< str.length(); i ++ ) 
        cout << str[i];
    return 0;
}

输出结果为:abcd


这里再说一下输入输出


输入有两种方式,一种是不能读入空格:cin,另一种是能读入空格:getline(cin, str);,即如果用cin读入一个字符串的话,碰到空格就会停止读入,而getline(cin, str);则是碰到回车(换行)才会停止读入


输出的话可以用cout来输出,当然也可以通过printf进行输出,但是过程有点繁琐,这里不介绍


(2)通过迭代器访问

一般通过(1)就可以满足访问的要求,但是string中的某些函数,比如insert(),erase()则要求用迭代器作为参数,所以我们还是要介绍一下迭代器的用法


定义一个迭代器

string::iteratoer it;

通过上述定义我们就得到了迭代器it,我们就可以通过*it去访问string里的每一位

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str = "abcd";
    for (string::iterator it = str.begin(); it != str.end(); it ++ )
        cout << *it;
    return 0;
}

当然我们也可以简写成:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str = "abcd";
    for (auto it = str.begin(); it != str.end(); it ++ )
        cout << *it;
    return 0;
}

输出结果为:abcd

3.string中的函数

(1)operator+=

这是string的加法,可以把两个string直接拼接起来

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str1 = "abcd";
    string str2 = "efg";
    string str3 = str1 + str2;
    cout << str3;
    return 0;
}

输出结果为:abcdefg

(2)compare operator

两个string类型可以直接使用==, !=, <, <=, >, >=比较大小,比较的规则是字典序

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str1 = "abcd";
    string str2 = "efg";
    if (str1 > str2) cout << "str1 > str2";
    else if (str1 == str2) cout << "str1 == str2";
    else cout << "str1 > str2";
    return 0;
}

输出结果为:str1 > str2

(3)length()/size()

length()返回string的长度,即存放的字符数,时间复杂度为O(1),size()length()的用法基本相同

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str1 = "abcd";
    string str2 = "efg";
    cout << str1.size() << ' ' << str2.length();
    return 0;
}

输出结果为:4 3

(4)insert()

这里介绍insert()的两种写法

insert(pos, string)pos号的位置插入字符串string

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str1 = "abcd";
    string str2 = "efg";
    str1.insert(2, str2);
    //在str1[2]处插入str2
    cout << str1;
    return 0;
}

输出结果为:abefgcd

insert(it, it2, it3)it为原字符串的欲插入位置,it2it3为待插入字符串的首位迭代器,用来表示[it2, it3)将被插在it的位置上

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str1 = "abcd";
    string str2 = "efg";
    str1.insert(str1.begin() + 2, str2.begin(), str2.end());
    cout << str1;
    return 0;
}

输出结果为:abefgcd

目录
相关文章
|
19天前
|
存储 算法 C语言
【C++初阶】8. STL初阶 + String类
【C++初阶】8. STL初阶 + String类
48 1
|
2月前
|
存储 编译器 C++
C++:STL - string
C++:STL - string
59 1
|
3月前
|
存储 Linux C语言
C++STL——string类详解及其模拟实现
C++STL——string类详解及其模拟实现
|
4月前
|
C++ 容器
【C++】STL容器——string类的例题应用(9)
【C++】STL容器——string类的例题应用(9)
|
4月前
|
C++ 容器
【C++】STL容器——string类的使用指南(含代码演示)(8)
【C++】STL容器——string类的使用指南(含代码演示)(8)
|
4月前
|
编译器 C++
C++之STL库:string类(用法列举和总结)
C++之STL库:string类(用法列举和总结)
|
4月前
|
Linux 编译器 C语言
【C++】STL之string类模拟-3
【C++】STL之string类模拟
23 0
|
4月前
|
算法 C++ 测试技术
【C++】STL之string类模拟-2
【C++】STL之string类模拟
58 0
【C++】STL之string类模拟-2
|
4月前
|
安全 编译器 C++
【C++】STL之string类模拟-1
【C++】STL之string类模拟
29 0
|
4月前
|
存储 算法 C语言
【C++】STL之string类概述-3
【C++】STL之string类概述
48 0