STL-string

目录

💡介绍

💡string的基本操作

💡string的构造函数

💡string赋值操作

💡string字符串拼接

💡string的查找和替换

💡string字符串比较

💡string字符存取

💡string的插入和删除

💡string子串


💡介绍

本质:

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

string和char*区别:

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

特点:

string类内部封装了很多成员方法
例如: 查找find,拷贝copy,删除delete 替换replace,插入insertstring管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责

💡string的基本操作

💡string的构造函数

如何用string构造字符串

构造函数原型:

  • string();   //创建一个空的字符串 例如: string str;
  • string(const char* s);   //使用字符串s初始化
  • string(const string& str);  //使用一个string对象初始化另一个string对象
  • string(int n, char c);  //使用n个字符c初始化
string s1;//默认构造const char* str="hello world";
string s2(str);
cout<<s2<<endl;string s3(s2);
cout<<s3<<endl;string s4(10,'a');

💡string赋值操作

功能描述:

  • 给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赋给当前字符串
int main()
{string str1;str1 = "hello";cout <<"str1=" << str1 << endl;string str2;str2 = str1;cout << "str2=" << str2 << endl;string str3;str3 = 'a';cout << "str3=" << str3 << endl;string str4;str4.assign("hello world");cout << "str4=" << str4 << endl;string str5;str5.assign("hello world",5);cout << "str5=" << str5 << endl;string str6;str6.assign(10, 'a');cout << "str6=" << str6 << endl;return 0;
}

💡string字符串拼接

功能描述:

  • 实现在字符串末尾拼接字符串

函数原型:

  • string& operator+=(const char* str);           //重载+=操作符
  • string& operator+=(const char c);             //重载+=操作符
  • string& operator+=(const string& str);        //重载+=操作符
  • string& append(const char *s);               //把字符串S连接到当前字符串结尾
  • string& append(const char *s, int n);        //把字符串s的前n个字符连接到当前字符串结尾
  • string& append(const string &s);             //同operator+=(const string& str)
  • string& append(const string &s,int pos,int n);        //字符串s中从pos开始的n个字符连接到字符串结尾
int main()
{string str1="hello ";cout << "str1=" << str1 << endl;str1 += "world";cout << "str1=" << str1 << endl;str1 += ';';cout << "str1=" << str1 << endl;string str2 = "pubg";str1 += str2;cout << "str1=" << str1 << endl;string str3="I";cout << "str3=" << str3 << endl;str3.append(" love ");cout << "str3=" << str3 << endl;str3.append("game abd", 4);cout << "str3=" << str3 << endl;//str3.append(str2);//cout << "str3=" << str3 << endl;//str1=hello world;pubgstr3.append(str1, 12, 4);//只截取到pubg  参数2是从哪个位置开始截取,参数3是截取字符个数cout << "str3=" << str3 << endl;return 0;
}

💡string的查找和替换

功能描述:

  • 查找: 查找指定字符串是否存在
  • 替换: 在指定的位置替换字符串

函数原型:

  • int find(const string& str, int pos = e) const;          //查找str第一次出现位置,从pos开始查找
  • int find(const char* s, int pos = e) const;        //查找s第一次出现位置,从pos开始查找
  • int find(const char* s, int pos, int n) const;      //从pos位置查找s的前n个字符第一次位置
  • int find(const char c, int pos = e) const;       //查找字符c第一次出现位置
  • int rfind(const string& str, int pos = npos) const;   //查找str最后一次位置,从pos开始查找
  • int rfind(const char* s, int pos = npos) const;      //查找s最后一次出现位置,从pos开始查找
  • int rfind(const char* s, int pos, int n) const;     //从pos查找s的前n个字符最后一次位置
  • int rfind(const char c, int pos = e) const;  //查找字符C最后一次出现位置
  • string& replace(int pos, int n, const string& str);  
    //替换从pos开始n个字符为字符串str
  • string& replace(int pos, int n,const char* s);   //替换从pos开始的n个字符为字符串s

注意:rfind从右往左查

        find从左往右查

//字符串查找和替换
//查找
void test1()
{string str1 = "abcdefgde";int pos=str1.find("de");//从第一个字符开始找,存在则返回第一个字符的下标,不存在就返回-1cout << pos << endl;//rfind从右往左查//find从左往右查pos=str1.rfind("de");cout << pos << endl;}
//替换
void test2()
{string str1 = "abcdefg";//从下标为1的位置起三个字符替换为“1111”//去掉bcd ,插入“1111”str1.replace(1, 3, "1111");cout << str1 << endl;}
int main()
{//test1();test2();return 0;
}

💡string字符串比较

功能描述:

  • 字符串之间的比较

比较方式:

  • 字符串比较是按字符的ASCII码进行对比

= 返回 0
> 返回 1
< 返回 -1

函数原型:

  • int compare(const string &s) const; //与字符串s比较
  • int compare(const char *s) const;  //与字符串s比较
//string字符串比较
int main()
{string str1 = "hello";string str2 = "hello";if (str1.compare(str2) == 0){cout << "str1==str2" << endl;}string str3 = "ok";if (str1.compare(str3) < 0){cout << "str1<str3" << endl;}return 0;
}

💡string字符存取

string中单个字符存取方式有两种

  • char& operator[](int n);  //通过口方式取字符
  • char& at(int n);  //通过at方法获取字符
//string字符存取
int main()
{string str = "hello world";//通过[]访问单个字符for (int i = 0; i < str.size(); i++){cout << str[i] << " ";}cout << endl;//通过at访问单个字符for (int i = 0; i < str.size(); i++){cout << str.at(i) << " ";}cout << endl;//修改单个字符str[0] = 'x';cout << str << endl;str.at(0) = 'p';cout << str << endl;return 0;
}

💡string的插入和删除

功能描述:

  • 对string字符串进行插入和删除字符操作

函数原型:

  • string& insert(int pos, const char* s);        //插入字符串
  • string& insert(int pos, const string& str);   //插入字符串
  • string& insert(int pos, int n, char c);      //在指定位置插入n个字符C
  • string& erase(int pos, int n = npos);      //删除从Pos开始的n个字符
//string的插入和删除
int main()
{string str = "hello";//起始下标都是0//插入str.insert(1, "111");//在指定位置之前插入cout << str << endl;//删除str.erase(1, 3);//从指定位置开始删除多少个cout << str << endl;return 0;
} 

💡string子串

功能描述:

  • 从字符串中获取想要的子串

函数原型:

  • string substr(int pos = ,int n = npos) const; //返回由ps开始的n个字符组成的字符串
//string子串
int main()
{string str = "abcdef";string subStr = str.substr(1, 3);//从某个位置开始截取多少个cout << "subStr=" << subStr << endl;string email = "wzh@qq.com";int pos = email.find("@");string s = email.substr(0, pos);cout << s <<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/317785.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt6.5类库详解:QFontComboBox

哈喽大家好&#xff0c;欢迎关注公众号(20YC编程)&#xff0c;有免费视频课程哦&#xff01; -今日内容- 1 QFontComboBox介绍 QFontComboBox是Qt框架中的一个字体选择类&#xff0c;它提供了一个下拉列表框&#xff0c;用于选择字体。 QFontComboBox的主要功能和特点&#x…

统信UOS操作系统上扩容数据盘

原文链接&#xff1a;统信UOS操作系统上扩容数据盘 hello&#xff0c;大家好啊&#xff01;今天我要给大家介绍的是在统信UOS操作系统上扩容数据盘的方法。在使用UOS的过程中&#xff0c;随着数据的不断增加&#xff0c;原有磁盘空间可能会变得不足&#xff0c;这时候就需要对数…

C++ DAY6 作业

1.用模板类写顺序表 #include <iostream>using namespace std;#define MAXSIZE 10 template <typename T> class Arr {T *data NULL;int len 0; public://构造函数Arr():data(new T){}Arr(T a,int len):data(new T(a)),len(len){}//析构函数~Arr(){delete data;}…

C语言文件操作(2)

目录 6. 文本文件和二进制文件 7. 文件读取结束的判定 7.1 被错误使用的feof 8. 文件缓冲区 6. 文本文件和二进制文件 根据数据的组织形式&#xff0c;数据文件被称为文本文件或者二进制文件。 数据在内存中以二进制的形式存储&#xff0c;如果不加转换的输出到外存&#xff…

Python for与while循环的介绍和对应练习题的巩固

for循环 重复执行同一段代码就是循环 循环列表 for val in list_name: list_num [1,2,3,4,5,6,7,8,9] for i in list_num:print(i)代码执行顺序 从上往下依次执行 遍历 通过某种顺序把某种集合所有元素都访问一遍 list_food{"火锅","烧烤","张…

微信公众号请求获取相关权限后端代码

用微信的东西&#xff0c;总要避免到各种与微信那边的交互。 1.首先要有个接口&#xff0c;证明你是服务端&#xff08;填写服务器配置&#xff09; 接入概述 | 微信开放文档 主代码 /*** 服务器配置验证* param* return*/PassTokenGetMapping("/giveWxCheck")publi…

一文讲清数据资产入表实操

《中共中央 国务院关于构建数据基础制度更好发挥数据要素作用的意见》已发布一年&#xff0c;数据资产化和入表已成为2023年的热门话题&#xff0c;随着2023年底国家数据局吹风《"数据要素x"三年行动计划&#xff08;2024-2026年&#xff09;》即将发布&#xff0c;这…

面试题:Linux命令大全

序号命令对应英文作用1ls [目录名]list查看当前目录下的内容2pwdprint work directory查看当前所在目录3cd [目录名]change directory切换目录4touch [文件名]touch如果文件不存在,创建文件5mkdir [目录名]make directory创建目录6rm [文件名]remove删除指定文件 ls 查看当前目…

LDD学习笔记 -- Linux内核模块

LDD学习笔记 -- 内核模块 简介LKM类型Static Linux Kernel ModuleDynamic Linux Kernel ModuleLKM编写语法 syntax详细描述内核头文件用户空间头文件Module Initialization FunctionModule Cleanup FunctionKeyword & Tag宏 __init __exitLKM入口注册Module Metadate&#…

成都谷达冠楠:抖店创业需要多少钱成本

随着互联网的发展&#xff0c;越来越多的人选择在网上开设自己的店铺&#xff0c;其中抖音小店因其独特的推广方式和巨大的流量优势&#xff0c;成为了许多人创业的首选。那么&#xff0c;开一家抖音小店需要多少成本呢?这是许多创业者关心的问题。 首先&#xff0c;我们需要明…

1.3 day3 IO进程线程

使用标准IO进行文件拷贝 #include <myhead.h> int main(int argc, const char *argv[]) {if(argc!3)//外部传参{printf("input error\n");}//定义两个文件指针FILE *fpNULL;FILE *cfpNULL;if((fpfopen(argv[1],"r"))NULL){perror("fopen error…

如何将图像数据转换为.mat文件,mat文件内是cell封装的struct格式的数据

在我看论文&#xff1a;《 Holistically-nested Edge Detection (HED) 》的时候&#xff0c;对论文中有关边缘结果的评价指标很感兴趣&#xff0c;于是我就研究了如何计算这些指标 如果有同样感兴趣或者有需要的小伙伴可以下载这里的代码&#xff1a;GitHub - xwjabc/hed: A P…