[C++提高编程](三):STL-string容器

news/2024/10/24 10:16:41/

string基本概念

本质

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

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(void)
{string s1;//默认构造,创建一个空字符串const char* str = "Hello World!";string s2(str);//使用字符串s初始化cout << "s2=" << s2 << endl;string s3(s2);//使用一个string对象初始化另一个string对象cout << "s3=" << s3 << endl;string s4(10, 'a'); //使用n个字符c初始化cout << "s4=" << s4 << endl;
}int main()
{test();return 0;
}

string赋值操作

赋值函数原型描述
string& operator=(const char *s);char*类型字符串,赋值给当前字符串
string& operator=(const string &s);字符串s赋值给当前字符串
string& operator=(char c);字符赋值给当前字符串
string& assign(const char *s);字符串s赋值给当前字符串
string& assign(const char *s, int n);字符串s的前n个字符赋值给当前字符串
string& assign(const string &s);把字符串s赋值给当前字符串
string& assign(int n, char c);用n个字符c赋值给字符串
#include <iostream>
#include <string>using namespace std;void test(void)
{string str1;str1 = "Hello World.";cout << "str1 =" << str1 << endl;string str2 = str1;cout << "str2 =" << str2 << endl;string str3;str3 = 'a';cout << "str3 =" << str3 << endl;string str4;str4.assign("Hello C++!");cout << "str4 =" << str4 << endl;string str5;str5.assign("Hello C++!", 5);cout << "str5 =" << str5 << endl;string str6;str6.assign(str5);cout << "str6 =" << str6 << endl;string str7;str7.assign(5, 'a');cout << "str7 =" << str7 << endl;
}int main()
{test();return 0;
}

string字符串拼接

字符串拼接函数原型描述
string& operator+=(const char *s);重载+=操作符
string& operator+=(const string &s);重载+=操作符
string& operator+=(char c);重载+=操作符
string& append(const char *s);把字符串s连接到当前字符串末尾                
string& append(const char *s, int n);把字符串s的前n个字符连接到当前字符串末尾 
string& append(const string &s);同operator+=(const string &s);
string& append(const string &s, int pos, int n);字符串s中从pos开始的n个字符连接到当前字符串末尾 
#include <iostream>
#include <string>using namespace std;void test(void)
{string str1 ="我";str1 += "爱玩游戏";cout << "str1 = " << str1 << endl;str1 += ':';cout << "str1 = " << str1 << endl;string str2("LOL/DNF");str1 += str2;cout << "str1 = " << str1 << endl;string str3 = "I";str3.append(" Love ");cout << "str3 = " << str3 << endl;str3.append("game abcde", 4);cout << "str3 = " << str3 << endl;str3.append(":LOL ");cout << "str3 = " << str3 << endl;str3.append("DNF GG", 0, 3);cout << "str3 = " << str3 << endl;
}int main()
{test();return 0;
}

string查找和替换

字符串查找和替换函数原型描述
int find(const string& str, int pos = 0) const; 查找str第一次出现的位置,从pos开始查找
int find(const char * s, int pos = 0) const;查找s第一次出现位置,从pos开始查找
int find(const char * s, int pos, int n) const;从pos位置查找s的前n个字符第一次位置
int find(const char c, int pos = 0) const;查找字符c第一次出现位置
int rfind(const string& str, int pos = npos) const;查找str最后一次位置,从pos开始查找(从右往左查)
string& replace(int pos, int n, const string& str);替换 从pos开始的n个字符为字符串str
string& replace(int pos, int n, const char *s);替换 从pos开始的n个字符为字符串s
#include <iostream>
#include <string>using namespace std;void test(void)
{string str1 ="abcdefde";int pos = str1.find("de");if (pos == -1){cout << "未找到字符串" << endl;}else {cout << "找到字符串:" << pos << endl;}//rfind从右往左查找,find从左往右查找pos = str1.rfind("de");if (pos == -1){cout << "未找到字符串" << endl;}else {cout << "找到字符串:" << pos << endl;}string str2 = "hello";cout << "str1替换前:" << str1 << endl;//从0个字符起3个字符替换为str2str1.replace(0, 3, str2);cout << "str1替换后:" << str1 << endl;}int main()
{test();return 0;
}

string字符串比较

比较方式:按字符的ASCII码进行对比

  • = 返回 0
  • > 返回 1
  • < 返回 -1
字符串比较函数原型描述
int compare(const string &s)const; 与字符串s比较
int find(const char * s) const;与字符串s比较

string字符串存取

字符串存取函数原型描述
char& operator[](int n); 通过[]方式取字符
char& at(int n);通过at方式取字符
#include <iostream>
#include <string>using namespace std;void test(void)
{string str1 ="abcdefde";cout << str1[0] << endl;str1[0] = 'x';cout << str1[0] << endl;cout << str1.at(1) << endl;str1.at(1) = 'm';cout << str1[1] << endl;cout << str1 << endl;
}int main()
{test();return 0;
}

string字符串插入和删除

字符串插入和删除函数原型描述
string& insert(int pos, const char* s); 插入字符串
string& inser(int pos, const string& str);插入字符串
string& insert(int pos, int n, char c);在指定位置插入n个字符c
string& erase(int pos, int n = npos);删除从pos开始的n个字符
#include <iostream>
#include <string>using namespace std;void test(void)
{string str1 ="abcdefde";cout << "str1 = " << str1 << endl;str1.insert(1, "Hello");cout << "str1 = " << str1 << endl;str1.erase(1, 5);cout << "str1 = " << str1 << endl;
}int main()
{test();return 0;
}

string字串

字符串字串函数原型描述
string substr(int pos = 0, int n = npos)const; 返回由pos开始的n个字符组成的字符串
#include <iostream>
#include <string>using namespace std;void test(void)
{string str1 ="san.Liu@qq.com";cout << "str1 = " << str1 << endl;int pos = str1.find('@');cout << "pos = " << pos << endl;string Substr = str1.substr(0, pos);cout << "str1 = " << Substr << endl;
}int main()
{test();return 0;
}

推荐阅读:[C++提高编程](三):STL初识


http://www.ppmy.cn/news/1400535.html

相关文章

2024年03月CCF-GESP编程能力等级认证C++编程八级真题解析

本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 为丰富食堂菜谱,炒菜部进行头脑风暴。肉类有鸡肉、牛肉、羊肉、猪肉4种,切法有肉排、肉块、肉末3种,配菜有圆白菜、油菜、…

Mysql数据库——MHA高可用配置及故障切换

目录 一、MHA概述 1.MHA定义 2.MHA组成 3.MHA特点 4.MHA工作原理 二、数据同步方式 1.异步复制&#xff08;Asynchronous replication&#xff09; 2.全同步复制&#xff08;Fully synchronous replication&#xff09; 3.半同步复制&#xff08;Semisynchronous repl…

SOC子模块---RTC and watchdog

RTC RTC大致执行过程&#xff1a; 对SOC 中的锁相环或者外部晶振的时钟进行计数&#xff1b;产生时&#xff0c;分&#xff0c;秒的中断&#xff1b;送给中断控制器&#xff1b;中断控制器进行优先权选择后送给cpu&#xff1b;Cpu执行中断服务程序&#xff1b;在中断服务程序…

C++之STL整理(5)之string 用法(创建、赋值、增删查改)整理

C之STL整理&#xff08;5&#xff09;之string 用法&#xff08;创建、赋值、增删查改&#xff09;整理 注&#xff1a;整理一些突然学到的C知识&#xff0c;随时mark一下 例如&#xff1a;忘记的关键字用法&#xff0c;新关键字&#xff0c;新数据结构 C 的string用法整理 C之…

基于单片机温湿度光照自动窗帘系统设计

**单片机设计介绍&#xff0c;基于单片机温湿度光照自动窗帘系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机温湿度光照自动窗帘系统设计是一个集成了自动化、传感器技术和单片机控制的应用实例。该系统通过实…

星闪BLE与蓝牙

蓝牙与低功耗蓝牙 蓝牙工作在2.4GHz的频段&#xff0c;在工作频段2402MHz-2480MHz上分为79个信道&#xff0c;低功耗蓝牙分为40个信道。一组设备通信的时候&#xff0c;短暂占用一个信道发包&#xff0c;由于其跳频技术&#xff0c;每次传输完数据包之后都会切换到另一个信道继…

常见的Nginx+Redis+MQ+DB架构设计

三高&#xff0c;复杂的架构 SQRS CAP 缓存&#xff0c;限流 【Redis&#xff0c;缓存】 cache-aside 缓存cache&#xff1a;数据源的副本 store 1. Read/Write Through Pattern 读写穿透模式 redis&#xff1a;放当前在线用户&#xff0c;热点数据

智慧水利中数据可视化的关键作用

在当今这个数据驱动的时代&#xff0c;数据可视化已成为转化复杂数据集为易于理解的视觉格式的关键技术&#xff0c;它在智慧水利领域的应用尤为显著。智慧水利利用现代信息技术&#xff0c;整合水资源管理的各个方面&#xff0c;旨在提高水资源的使用效率和管理效能。数据可视…