STL常用容器—string容器

这篇具有很好参考价值的文章主要介绍了STL常用容器—string容器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

string基本概念

本质:

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

string和char * 区别:

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

特点:

  • string 类内部封装了很多成员属性和方法
  • string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责
  • 包含头文件 #include <string>

string初始化及赋值

1. 构造函数原型

  • string();           // 创建一个空的字符串 例如: string str;
  • string(const char* s);    // 使用字符串s初始化
  • string(const string& str);  // 使用一个string对象初始化另一个string对象

示例:

string str = "hello world";
const char *str0 = "hello";
string str1;		// 创建空字符串,调用无参构造函数
string str2(str);	// 调用拷贝构造函数

cout << str2 << endl;

2. 字符串赋值

C++内部已对operator=(const string &s)等一系列的=进行运算符重载,并且通过函数重载的方式实现支持将string类型、char *类型以及char 字符类型赋值给string字符串变量,可直接赋值,简洁明了。
示例:

string str = "hello world";
const char *str0 = "hello";
string str1;		// 创建空字符串,调用无参构造函数
str1 = str0;
cout << str1 << endl;
str1 = 's';
cout << str1 << endl;

assign方法赋值:
同时,string类型有赋值的方法assign,可以指定赋值前n个字符给目标字符,默认全部赋值,其中函数第一个参数为源字符串。
示例:

string str = "hello world";
string str1;		// 创建空字符串,调用无参构造函数
str1.assign("hello world",7);
cout << str1 << endl;

3. 字符串拼接

C++内部已对operator+(const string &s)等一系列的+进行运算符重载,并且通过函数重载的方式实现支持将string类型、char *类型以及char 字符类型字符串相加,可直接赋值,简洁明了。

string str1 = "hello";
string str2 = " world";
string str3;
str3 = str1 + str2;
cout << str3 << endl;

append方法拼接
同时,string类型有拼接的方法append,函数原型如下:

// 把字符串s连接到当前字符串结尾
string& append(const char *s); 	 
//字符串s中从pos开始的n个字符连接到字符串结尾
string& append(string &s, int pos, int n);

示例:

string str1 = "hello";
string str2 = " world";
string str3;
str3 = str1 + str2;
cout << str3 << endl;
str3.append(str2,0,3);
cout << str3 << endl;

string字符存取(遍历)

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

  • 通过 [ ] 方式获取字符
  • 通过 at 方法获取字符

获取字符串长度:利用字符串 size( ) 方法
示例:

void test()
{
	string str = "hello world!";
	int i = 0;
	//通过[]遍历字符串 
	for(i = 0; i < str.size(); i++)
		cout << str[i];
	cout << endl;
	//通过at()方法遍历字符串 
	for(i = 0; i < str.size(); i++)
		cout << str.at(i);
	cout << endl;
	
	//对字符串特定字符赋值 
	str[0] = 'x';
	str.at(1) = 'x';
	cout << str << endl;
}

字符串的查找和替换

查找函数原型:

//查找str第一次出现位置, 从pos开始查,默认为0
int find(const string& str, int pos = 0)
//查找字符c第一次出现位置
int find(const char c, int pos = 0);                    

成功返回找到的下标,错误返回-1
示例:

//查找
string str1 = "abcdefgde";
int pos = str1.find("de");
if (pos == -1)
	cout << "未找到" << endl;
else
	cout << "pos = " << pos << endl;

替换函数原型:

//从pos开始n个字符为字符串str
string& replace(int pos, int n, const string& str);   

示例:

//替换
string str1 = "abcdefgde";
str1.replace(1, 3, "1111");

cout << "str1 = " << str1 << endl;

总结:

  • find查找是从左往后,rfind从右往左
  • find找到字符串后返回查找的第一个字符位置,找不到返回 -1
  • replace在替换时,要指定从哪个位置起,多少个字符,替换成什么样的字符串

字符串比较

  • 字符串比较是按字符的ASCII码进行对比,比较机制与返回值与C语言一样。

函数原型:

//与字符串s比较
int compare(const string &s) const; 

示例:

//字符串比较
void test()
{
	string str1 = "hello";
	string str2 = "aello";
	int ret = str1.compare(str2);
	if(ret == 0)
		cout << "s1 = s2" << endl;
	else if(ret > 0)
		cout << "s1 > s2" << endl;
	else
		cout << "s1 < s2" << endl;
}

string取子串

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

函数原型:

//返回由pos开始的n个字符组成的字符串
string substr(int pos = 0, int n = npos);  

示例:

string str = "abcdefg";
string subStr = str.substr(1, 3);
cout << "subStr = " << subStr << endl;

string email = "hello@sina.com";
int pos = email.find('@');			
string username = email.substr(0,pos);
cout << "username= " << username << endl;
string web = email.substr(pos+1, email.size()-pos);
cout << "web= " << web << endl;

案例:利用以上字符串操作,自定义实现strtok函数的功能

补充:strtok函数具体功能及参数与返回值

char *strtok(char *str, const char *delim);
  • 功能: 字符串切割
  • 参数:
    str: 当前要切割的字符串
    delim: 根据指定的字符串进行切割
  • 返回值:
    成功: 切割出来的字符
    失败: NULL
    切割完毕也返回NULL
vector<string>  my_strtok(string str)
{
	vector<string> v;
	int pos = 0;
	int begin = 0;
	
	string subStr; 
	//cout << "src str=" << str << endl;
	
	while(1)
	{
		pos = str.find(":",begin);
		if(pos == -1)
			break;
		subStr = str.substr(begin, pos-begin);
		v.push_back(subStr);
		//cout << "sub str=" << subStr << endl;
		begin = pos + 1;
	}
	
	subStr = str.substr(begin, str.size()-begin);
	//cout << "sub str=" << subStr << endl;
	v.push_back(subStr);
	
	return v;
}

通过find方法寻找需要分割的字符,并通过substr函数分割子串,最后将各个子串存入容器。

字符串删除和插入

  • 对string字符串进行插入和删除字符操作
    函数原型:
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 str = "hello";
	str.insert(1, "111");
	cout << str << endl;

	str.erase(1, 3);  	//从1号位置开始删除3个字符
	cout << str << endl;

string与char *类型的转化

char * 转 string(构造函数)

char *c_str = "hello world";
string str(c_str );

string 转 char * (c_str)文章来源地址https://www.toymoban.com/news/detail-795363.html

string str("hello world");
char *c_str = str.c_str();

到了这里,关于STL常用容器—string容器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】STL容器——string类的使用指南(含代码演示)(8)

    前言 大家好吖,欢迎来到 YY 滴C++系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁 主要内容含: 欢迎订阅 YY 滴C++专栏!更多干货持续更新!以下是传送门! YY的《C++》专栏 YY的《C++11》专栏 YY的《Linux》专栏 YY的《数据结构》专栏 YY的《C语言基础》专栏 YY的《初学者易

    2024年02月08日
    浏览(42)
  • 【C++ STL】string类最全解析(什么是string?string类的常用接口有哪些?)

    目录 一、前言  二、什么是 string ?  💦 string 类的基本概念 💦 string 类与 char * 的区别   💦 string 类的作用  💦 总结  三、string 的常用接口详解  💦string 类对象的默认成员函数 ① 构造函数(初始化) ② 赋值重载(初始化) 💦string 类对象的访问及遍历操作 ① operator[ ]

    2024年04月17日
    浏览(40)
  • STL-常用容器-stack容器(栈)

    1 stack 基本概念 概念: stack是一种 先进后出 (First In Last Out,FILO)的数据结构,它只有一个出口 栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为 栈中进入数据称为 --- 入栈 push 栈中弹出数据称为 --- 出栈 pop 2 stack 常用接口 功能描述:栈容器常用的对外接口 构

    2024年02月11日
    浏览(29)
  • STL常用容器

    目录 ​​​​​​​ 1 string容器 1.1 基本概念 1.2 构造函数 1.3 赋值操作 1.4 字符串拼接 1.5 查找和替换 1.6 字符串比较 1.7 字符存取 1.8 插入与删除 1.9 获取字串 2 vector容器 2.1 基本概念 2.2 构造函数 2.3 赋值操作 2.4 容量和大小 2.5 插入和删除 2.6 数据存取 2.7 互换容器 2.8 预留空

    2024年02月03日
    浏览(33)
  • C++——string容器常用操作汇总

    纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 C语言风格字符串(以空字符结尾的字符数组)太过复杂难于掌握,不适合大程序的开发,所以C++标准库定义了一种string类,定义在头文件。 string容器可以看做一片连续的储存空间,并用一个char*指向这

    2024年02月13日
    浏览(34)
  • C++STL——list容器及其常用操作(详解)

    纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态

    2024年02月14日
    浏览(43)
  • 【C++】STL——string的模拟实现、常用构造函数、迭代器、运算符重载、扩容函数、增删查改

    string使用文章   这里我们 实现常用的第四个string(const char* s)和析构函数     拷贝构造函数实现:   在堆上使用new为当前对象的成员变量_str分配内存空间,大小为s._capacity + 1字节,即字符串的容量加上一个结束符\\0的空间。   我们使用深拷贝而不是浅拷贝,

    2024年02月15日
    浏览(50)
  • 详解C语言string.h中常用的14个库函数(四)

    本篇博客会讲解最后4个函数,分别是memset, memcpy, memmove, memcmp。这4个函数开头都是mem,即memory(内存)的缩写。 memset可以用来设置内存中的值。该函数可以把从ptr指向的空间开始,后面的num个字节设置成value的值。 举个简单的例子。假设有一个数组: 我们想把这个数组的前

    2023年04月24日
    浏览(34)
  • 【STL】string类 (下)

    目录 1,insert 2,erase 3,find 4,replace 5,rfind 6,substr 7,find_first_of 8,find_first_not_of 9,find_last_of 10,operator+ 11,getline 在 pos 位置之前插入字符串 擦除范围字符串 从 pos 位置开始,用 n 个字符替换; 上述可以看到,第一个替换从下标 0 开始用两个字符也就是 ” he “ 替换 “

    2024年02月05日
    浏览(67)
  • 【STL】手撕 string类

    目录 1,string类框架 2,string(构造) 3,~string(析构) 4,swap(交换) 5,string(拷贝构造) 1,常规法 2,简便法 6,size (字符长度) 7,c_str(返回字符形式的指针) 8,iterator(迭代器) 9,operator=(赋值) 1,常规写法 2,简便法 10,operator[](取值) 11,reserve(空间容量

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包