C++中string的库函数

2024-01-09 16:00:37

山再高,往上攀,总能登顶!

路再长,走下去,定能到达!


🎥烟雨长虹,孤鹜齐飞的个人主页

🔥个人专栏c++

期待小伙伴们的支持与关注!!!


目录

前言:

string的简介

?编辑

string的组成

string的功能

?string的基本用法

?string的声明与初始化

?声明一个空字符串:

? ?字符串的初始化:

运行效果:

?string的库函数

主要的功能:

<1>length函数:

函数声明#

函数使用#

<2>find函数:

函数声明#

函数使用#

<3>append函数:

函数声明#

函数使用#

<4>replace函数:

函数原型#

函数声明#

函数使用#

<5>substr函数:

函数原型#

函数声明#

函数使用#

<6>compare函数:

函数声明#

函数使用#

扩展#

遍历string的方法?

?string的插入和删除

insert函数:

函数原型#

函数使用#

push_back函数:

函数使用#

erase函数:

函数原型#

函数使用#

总结:


前言:

为什么学习 string
(1)C 语言中,字符串是以 '? \0 '? 结尾的一些字符的集合,为了操作方便, C 标准库中提供了一些 str 系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP 的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。
(2) OJ 中,有关字符串的题目基本以 string 的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string ,很少有人去使用 C 库中的字符串操作函数。

string的简介


string的组成

<1>string是C++标准库的重要组成部分,主要用于字符串处理

<2>使用string库需要在头文件中包括该库 #include<string>

<3>string与char[ ]不同,string实现了高度的封装,可以很方便地完成各种字符串的操作,比如拼接、截取、匹配等等


string的功能

<4>字符串管理:string封装了字符串的存储和管理。它当动处理字符串的内存分配和释放,避免了手动管理内存的麻烦
<5>动态大小调整:string可以根据需要自动调整字符串的大小。在添加或删除字符时,
string会自动调整内部的存储容量,确保足够的空间来容纳字符串
<6>安全性:string提供了一些方法来确保字符串的安全性。例如,它提供了越界访问检查,以避免访问超出字符串范围的字符
<7>迭代器支持:string支持迭代器,可以使用送代器遍历字符串中的字符,进行字符级别的操作

<8>兼容性:string是C++标准库的一部分,因此在C++中广泛使用,并且与其他标准库组件和C++语言特性兼容

?string的基本用法

?string的声明与初始化

#include<iostream>
#include<string>
using namespace std;
int main()
{
	//声明一个空字符串
	string str1;
	//使用字符串的字面量初始化字符串
	string str2 = "Hello C++";
	//使用另一个string的对象初始化字符串
	string str3 = str2;
	//使用部分字符串初始化字符串
	string str4 = str2.substr(0, 5);
	//使用字符数组初始化字符串
	const char* arr = "Hello C++";
	string str5(arr);
	//使用重复的字符初始化字符串
	string str6(5, 'A');
	//使用assign的方式初始化
	string str7;
	str7.assign("Hello C++", 5);
	cout << str1 << endl;
	cout << str2 << endl;
	cout << str3 << endl;
	cout << str4 << endl;
	cout << str5 << endl;
	cout << str6 << endl;
	cout << str7 << endl;
	return 0;
}

?声明一个空字符串:

?string str1;


? ?字符串的初始化:

? ?<1>使用字符串的字面量初始化字符串
?? ?string str2 = "Hello C++";
? ? <2>使用另一个string的对象初始化字符串
?? ?string str3 = str2;
? ? <3>使用部分字符串初始化字符串
?? ?string str4 = str2.substr(0, 5);
? ? <4>使用字符数组初始化字符串
?? ?const char* arr = "Hello C++";
?? ?string str5(arr);
? ? <5>使用重复的字符初始化字符串

? ??string str6(5, 'A');

? ? <6>使用assign的方式初始化字符串
?? ?string str7;
?? ?str7.assign("Hello C++", 5);


运行效果:

?string的库函数

主要的功能:

<1>获取字符串的长度length

<2>字符串的查找find

<3>字符串的追加append

<4>字符串的替换replace

<5>提取子字符串substr

<6>字符串的比较compare


<1>length函数:

作用:获取字符串的长度

C++ string中函数?length()?等同于?size()都是返回?string 长度(单位字节)

函数声明#

size_t length()

因为 length 返回的是无符号的整型所以我们用size_t来接收

用 int 来接收也没有关系

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str = "I love you";
	size_t rs = str.length();
	cout << rs;
	return 0;
}


<2>find函数:

作用:查找源字符串 arr1 中是否包含子串 arr2

find函数的返回值是整数,假如字符串存在包含关系,其返回值必定不等于npos,但如果字符串不存在包含关系,那么返回值一定npos

函数声明#

str.find();

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str = "you love me";
	int rs = str.find("me");
	if (rs != str.npos)//如果没找到,返回一个特别的标志c++中用npos表示
	{
		cout << "找到了!!!";
	}
	else
	{
		cout << "找不到!!!";
	}
	return 0;
}


<3>append函数:

作用:将(字符串/字符) str2?拼接到(字符串/字符) str1 后面

函数声明#

str.append();

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str1 = "Hello";
	string str2 = "C++";
	string rs = str1.append(",").append(str2);
	cout << rs << endl;
	return 0;
}

如果要添加其他字符或者字符串我们可以用 ' . ' 运算符将它们连接起来


<4>replace函数:

函数原型#

string replace (size_t pos, size_t len, const string& str);

pos表示要替换的子串在原字符串中的起始位置

len表示要替换的子串的长度

str表示用来替换的字符串

作用:用str替换指定字符串从起始位置pos开始长度为len的字符

函数声明#

str.replace();

函数使用#

(1)

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str1 = "Hello";
	str1.replace(0, 5, "World");
	cout << str1 << endl;
	return 0;
}

(2)用迭代器 起始位置结束位置 的将str字符串的内容全部替换

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str = "Hello";
	str = str.replace(str.begin(), str.end(), "#####");
	cout << str << endl;
	return 0;
}


<5>substr函数:

函数原型#

string substr (size_t pos, size_t len) 

pos表示要截取的子字符串的起始位置

len表示要截取的子字符串的长度

作用:截取字符串

函数声明#

str.substr();

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str = "Hello C++";
	string arr = str.substr(6, 3);
	cout << arr << endl;
	return 0;
}


<6>compare函数:

作用:用于比较两个字符串是否相等

当字符串str1字符串str2相等时,返回?0
当字符串str1小于字符串str2时,返回-1
当字符串str1大于字符串str2时,返回?1

函数声明#

arr1.compare();

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string arr1 = "Hello";
	string arr2 = "World";
	string str1 = "aaa";
	string str2 = "aaa";
	int rs1 = arr1.compare(arr2);
	int rs2 = str1.compare(str2);
	if (rs1 == 0)
	{
		cout << "相等" << endl;
	}
	else if (rs1 < 0)
	{
		cout << "arr1小于arr2" << endl;
	}
	else 
	{
		cout << "arr1大于arr2" << endl;
	}
		if (rs2 == 0)
		{
			cout << "相等" << endl;
		}
		else if (rs2 < 0)
		{
			cout << "str1小于str2" << endl;
		}
		else 
		{
			cout << "str1大于str2" << endl;
		}
	return 0;
}

扩展#

(1)string重载了不等号,所以可以直接使用s1< s2的方式来比较string的大小,比较的规则是按照字典序大小进行比较。
(2)字典序的比较方法是从小到大一个一个比较,一旦遇到不相等的字符就确定大小关系。

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string arr1 = "Hello";
	string arr2 = "World";
	if (arr1>arr2)
	{
		cout << "arr1大于arr2" << endl;
	}
	else if(arr1<arr2)
	{
		cout << "arr1小于arr2" << endl;
	}
	else
	{
		cout << "相等" << endl;
	}
	return 0;
}

遍历string的方法?

常用的遍历string的方法有三种

<1>循环枚举下标
<2>auto枚举(其中&表示取引用类型,如果对i修改将会改变原来的值)

<3>迭代器


#include<iostream>
#include<string>
using namespace std;
int main()
{
	string arr = "abcdef";
	for (int i = 0;i<arr.length();i++)//循环枚举下标
	cout << arr[i] << " " ;
	cout << "\n";


	for (auto i : arr)//auto枚举
	{
		cout << i << " ";
	}
	cout << "\n";


	string::iterator rs = arr.begin();//迭代器
	while (rs != arr.end())
	{
		cout << *rs++ << " ";
	}
	cout << "\n";
	return 0;
}

?string的插入和删除

push_back: (重点) 尾插
insert:(重点)?头插
erase: 删除指定位置的数据


insert函数:

函数原型#

basic_string& insert (size_type pos, const basic_string& str);

作用:在原串下标为pos的字符前插入字符串str

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str = "World";
	str.insert(0, "Hello ");
	cout << str << endl;
	return 0;
}


push_back函数:

作用:将一个字符添加到字符串,位置为当前最后一个元素的下一个元素

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str = "Hello";
	for (int i = 0; i < 6; i++)
	{
		string arr = " World";
		str.push_back(arr[i]);
	}
	cout << str << endl;
	return 0;
}


erase函数:

函数原型#

string& erase ( size_t pos, size_t n );

作用:删除字符串从pos位置开始的n个字符

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str = "Hello World";
	str.erase(6, 5);
	cout << str << endl;
	return 0;
}

上面已经对string进行了简单的介绍,大家只要能够正常使用即可

总结:


string的功能强大,不仅拥有很多库函数,还可以使用迭代器和auto提高了编程速度。我们在刷一些算法题的时候string往往是最优解,所以大家就冲冲冲拿下string!!!

?

文章来源:https://blog.csdn.net/2301_79201049/article/details/135396784
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。