c++STL容器之string容器

本质;string是c++风格的字符串,而string本质上是一个类

string和char*的区别:

  • char*是一个指针;
  • string是一个类,类内部封装了char*,管理这个字符串,是一个char*的容器;

特点:

string内部封装了很多内部成员方法,例如find、copy、delete、replace、insert等。

string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行操作。

一、string构造函数

  • string():创建一个空的字符串
  • string(const char* s):使用字符串s初始化
  • string(const string& str):使用一个string对象初始化另一个string对象
  • string(int n,char c):使用n个字符c初始化
  • #include<iostream>
    #include<string>
    using namespace std;
    
    void test() {
        string s1;//默认构造
        const char* str = "hello world";
        string s2(str);
        cout <<"s2="<< s2 << endl;
        string s3(s2);
        cout << "s3=" << s3 << endl;
        string s4(10, ‘a‘);
        cout << "s4=" << s4 << endl;
    }
    
    int main() {
        test();
        system("pause");
        return 0;
    }

二、string赋值操作

#include<iostream>
#include<string>
using namespace std;

void test() {
    string str1;
    str1 = "hello world";
    cout << "str1=" << str1 << endl;
    string str2;
    str2 = str1;
    string str3;
    str3 = ‘c‘;
    string str4;
    str4.assign("hello woeld");
    string str5;
    str5.assign("hello world", 5);//只赋值前n个字符
    string str6;
    str6.assign(str5);
    string str7;
    str7.assign(10, ‘w‘);//赋值十个w
}

int main() {
    test();
    system("pause");
    return 0;
}

三、字符串拼接

#include<iostream>
#include<string>
using namespace std;

void test() {
    string str1;
    str1 = "我";
    str1 += "爱中国";
    cout << "str1=" << str1 << endl;
    str1 += ‘!‘;
    cout << "str1=" << str1 << endl;
    string str2 = "LOL";
    str1 += str2;
    cout << "str1=" << str1 << endl;
    string str3 = "i";
    str3.append(" love you");
    cout << "str3=" << str3 << endl;
    str3.append("new gameing",4);//拼接前n个字符
    str3.append(str2);
    str3.append(str2, 0, 2);//只截取第0,1个字符并拼接
    cout << "str3=" << str3 << endl;
}

int main() {
    test();
    system("pause");
    return 0;
}

三、字符串的查找和替换

#include<iostream>
#include<string>
using namespace std;

void test() {
    //1.查找
    string str1 = "abcdefg";
    //find、rfind只找到第一个出现的位置
    cout << str1.find("bc", 0) << endl;//默认从零位置开始,并返回找到的索引位置,未找到返回-1
    cout << str1.rfind("bc",6) << endl;//rfind是从右往左查找,6是起始索引位置
    //2.替换
    str1.replace(0, 2, "pppp");//将0-1之间的位置替换成"pppp"
    cout << str1 << endl;
}

int main() {
    test();
    system("pause");
    return 0;
}

四、字符串比较

#include<iostream>
#include<string>
using namespace std;

void test() {
    string str1 = "hello";
    string str2 = "hello";
    //逐一比较每个字符的ASCII,若全部相等,返回0,若str1的ASCII大于str2则返回1,否则返回-1
    str1.compare(str2);
}

int main() {
    test();
    system("pause");
    return 0;
}

五、字符串的存取

#include<iostream>
#include<string>
using namespace std;

void test() {
    string str1 = "hello";
    //读
    cout << str1[0] << endl;;
    cout << str1.at(0) << endl;
    //写
    str1[0] = ‘m‘;
    cout << str1 << endl;
    str1.at(0) = ‘p‘;
    cout << str1 << endl;
}

int main() {
    test();
    system("pause");
    return 0;
}

六、字符串的插入与删除

void test() {
    string str1 = "hello";
    str1.insert(1, "big");//在某个位置插入
    cout << str1 << endl;
    str1.erase(1, 3);//删除起始位置和最终位置之间的
    cout << str1 << endl;
}

七、子串获取

void test() {
    string str1 = "hello";
    cout << str1.substr(1, 3) << endl;//返回1-3之间的子串,包含下标1,2,3
}

原文地址:https://www.cnblogs.com/xiximayou/p/12111059.html

时间: 2024-11-11 00:14:12

c++STL容器之string容器的相关文章

c++STL容器之list容器

链表:将数据进行链式存储.物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接进行实现的. STL中的链表是一个双向循环链表. 一.构造函数 list<T> lst; list(bag,end); list(n,elem); list(const list &list); 二.list的赋值和交换 assign(beg,end); assign(n,ele); list& operator=(const list &list); swap(list)

c++STL容器之deque容器

deque是双端数组. deque和vector的区别: vector对于头部的插入和删除效率低,数据量越大,效率越低: deque相对于而言,对头部的插入和删除比vector快: vector访问元素时速度比deque快,这和两者的内部实现有关: deque内部工作原理: deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放着真实数据.中控器维护的是每个缓冲区的地址,使得使用每个deque时像一块连续的内存空间. deque容器的迭代器是支持随机访问的. 一.deque构造函数 de

c++STL容器之stack容器

栈:先进后出. 一.构造函数 stack<T> stk; stack<const stack& stk>; 二.赋值操作 stack& operator=(const stack &stk); 三.数据存取 push(ele); pop(); top(); 四.大小操作 empty(); size(); 原文地址:https://www.cnblogs.com/xiximayou/p/12111639.html

c++STL容器之queue容器

队列:先进先出. 一.构造函数 queue<T> que; queue(const queue &que); 二.赋值操作 queue& operator=(const queue &que); 三.数据存取 push(ele); pop(); back(); front(); 四.大小操作 empty(); size(); 原文地址:https://www.cnblogs.com/xiximayou/p/12111651.html

初探STL容器之Vector

vector 特点: 1.可变长的动态数组 2.使用时包含头文件 #include <vector> 3.支持随机访问迭代器 ? 根据下标随机访问某个元素时间为常数 ? 在尾部添加速度很快 ? 在中间插入慢 成员函数 初始化 vector(); 初始化成空 vector(int n); 初始化成有n个元素 vector(int n, const T & val); 初始化成有n个元素, 每个元素的值都是val,类型是T vector(iterator first, iterator l

初探STL容器之List

List 特点: 1.实质上是双向链表 2.使用时包含<list>头文件 #include<list> 3.不支持随机访问迭代器,只能使用双向迭代器  //因此不能使用一些算法和运算符操作 4.在任何位置的插入.删除操作都是常数时间 成员函数 初始化 list <int> intlist0; // 创建空的 intlist list <int> intlist1( 3 ); //包含3个元素 list <int> intlist2( 5, 2 )

STL容器之map与hash_map

一.简介 就应用来说,map已经是STL标准库的成员,而hash_map暂时还未进入标准库,是扩展ext中的一个功能,但也是非常常用并且非常重要的库. 二.简单对比 首先,要说的是这两种数据结构的都提供了KEY-VALUE的存储和查找的功能.但是实现是不一样的,map是用的红黑树,查询时间复杂度为log(n).而hash_map是用的哈希表,查询时间复杂度理论上可以是常数,但是消耗内存大,是一种以存储换时间的方法. 树查找,在总查找效率上比不上hash表,但是它很稳定,它的算法复杂度不会出现波动

STL容器之map

Map是一个关联容器,它内部有两个数据,第一个(first)称为关键字(key),第二个(second)称为关键字的值(value),key与value二者是一一对应的(称为pair),且key在map中关键字是唯一的.map内部自建一颗严格意义上的平衡二叉树,对数据有排序功能,因此,map内部数据都是有排序的(less或greater). map.insert() ? 实际上,map的insert比较简单,因此不论你怎么插,其内部的平衡二叉树都会根据关键字key自动排序.在上述代码中可知,ke

JAVA并发容器之CopyOnWrite容器

学习资源:http://www.cnblogs.com/dolphin0520/p/3938914.html CopyOnWrite容器即写时复制的容器.通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器.这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素.所以CopyOnWrite容器也是一种读写分离的思想