本质;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
}

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

  1. [知识点]C++中STL容器之map

    UPDATE(20190416):写完vector和set之后,发现不少内容全部引导到map上了……于是进行了一定的描述补充与更正. 零.STL目录 1.容器之map 2.容器之vector 3.容器 ...

  2. [知识点]C++中STL容器之vector

    零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 关于STL和STL容器的概念参见STL系列第一篇——map(见上).今天介绍第二个成员——vector. 二.用途 ...

  3. [知识点]C++中STL容器之set

    零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 继上期的vector之后,我们又迎来了另一个类数组的STL容器——set. 二.用途与特性 set,顾名思义,集合 ...

  4. C++STL模板库序列容器之List容器

    目录 一丶List容器的存储结构 二丶丶STL中list容器的使用. 一丶List容器的存储结构 list容器底层是链表结构来维护的.跟vector不一样. vector是数组维护的.拥有连续内存.所 ...

  5. STL容器之map

    [1]map容器 map 是关联容器.容器中的每一个元素都是由一个键值和一个数据值组成的. set 是一个集合它以其元素作为键值(同一个键值只能出现一次),且默认以升序排列. list 是一个顺序容器 ...

  6. STL容器之vector

    [1]模板类vector 模板类vector可理解为广义数组.广义数组,即与类型无关的数组,具有与数组相同的所有操作. 那么,你或许要问:既然C++语言本身已提供了一个序列式容器array,为什么还要 ...

  7. STL容器之Array[转]

    转自https://blog.csdn.net/sin_geek/article/details/51067874 作者 Sin_Geek 简介 array在头文件<array> 中定义 ...

  8. C++ STL容器之 stack

    STL 中的 stack 是一种容器适配器,而不是一种容器. 它是容器适配器是指,只要支持一系列方法的容器(empty, size, back, push_back, pop_back),都能作为st ...

  9. STL容器之set

    [1]set容器 一个集合(set)是一个容器,它其中所包含的元素的值是唯一的. [2]set容器方法 (1)set构造函数.插入函数.遍历过程 应用示例代码如下: #include <set& ...

随机推荐

  1. kafka生产者和消费者api的简单使用

    kafka生产者和消费者api的简单使用 一.背景 二.需要实现的功能 1.生产者实现功能 1.KafkaProducer线程安全的,可以在多线程中使用. 2.消息发送的key和value的序列化 3 ...

  2. 使用jave2实现将wav格式的音频转换成mp3格式

    最近需要用到语音合成功能,网上查阅了一番,发现可以使用腾讯云的语音合成API来完成这个功能,但是腾讯云的api返回的是wav格式的音频文件,这个格式的文件有些不通用,因此需要转换成mp3格式的文件. ...

  3. 嵌入式单片机之STM32F103C8T6最小系统板电路设计参考

    STM32F103C8T6最小系统板电路设计 一.电源部分 设计了一个XH插座,以便使用3.7V锂电池供电,接入电压不允许超过6V. 二.指示灯部分 电源指示灯可以通过一个短路帽控制亮灭,以达到节电的 ...

  4. linux wifi热点服务脚本

    最近有关wifi热点的驱动,启动参数都调试完了,验证可以连接传输数据. 首先要在系统启动脚本中插入wifi驱动,配置wlan0的ip insmod /system/vendor/modules/818 ...

  5. linux切换shell

    1. $SHELL这一环境变量用于保存当前用户使用的shell,所以我们可以输出$SHELL来查看当前使用的shell是什么: 2. 查看/etc/shells文件,可以看到当前系统中安装的有效的sh ...

  6. 腾讯云星星海SA2云服务器特点

    一.腾讯云星星海SA2云服务器特点 腾讯云深度定制AMD处理器.AMD EPYC ROME ,频率3.3Ghz.提供超大单核 L3 Cache.(基础频率2.6Ghz,睿频3.3Ghz).企业级服务器 ...

  7. 在Delphi中高效执行JS代码

    因为一些原因,需要进行encodeURIComponent和decodeURIComponent编码,在Delphi中找了一个,首先是发现不能正确编码+号,后面强制处理替换了,勉强可用. 后面发现多次 ...

  8. Fiddler抓包工具简介:(二)下载安装及配置证书和代理

    Fiddler下载安装及配置 一.安装过程: 下载官网:https://www.telerik.com/fiddler 安装过程:一路next即可 启动Fiddler:当你启动了Fiddler,程序将 ...

  9. SpringCould | Nacos与Feign

    服务注册Nacos 介绍 概念 一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台. Nacos: Dynamic Naming and Configuration Service Nac ...

  10. Unity——技能系统(一)

    技能系统(一) 一.Demo展示 二.功能介绍 集成了技能,冷却,buff,UI显示,倒计时,动画等: 技能类型:弹道技能,动画事件根据帧数采用延迟调用技能,自定义释放位置(偏移,发射点两种),buf ...