【C++STL】string类

举报
人才程序员 发表于 2023/11/30 17:51:56 2023/11/30
【摘要】 @TOC 前言本节课讲的是STL(Standard Template Library 标准模板库)string(二)提示:以下是本篇文章正文内容,下面案例可供参考 使用 重新赋值//1、 = 赋值string s("hello");s = "123456";cout << s;//输出:123456//2、>> 输入(string内部有operator >>操作符)cin >> s;//输...

@TOC


前言

本节课讲的是STL(Standard Template Library 标准模板库)
string(二)


提示:以下是本篇文章正文内容,下面案例可供参考

使用

重新赋值

//1、 = 赋值
string s("hello");
s = "123456";
cout << s;//输出:123456

//2、>>  输入(string内部有operator >>操作符)
cin >> s;//输入:你好
cout << s;//输出:你好

//3、assign
//1)、basic_string &assign( const basic_string &str );  以string类重新赋值
string s2("csdn");
s.assign(s2);
cout << s;//输出:csdn

//2)、basic_string &assign( const char *str );  以str重新赋值
s.assign("STL");
cout << s;//输出:STL

//3)、basic_string &assign( const basic_string &str, size_type index, size_type len );  以string的某一段赋值:index为开始下标,index+len为结束的下标
string s3("C++ STL Python");
s.assign(s3,0,6);
cout << s;//输出:C++ STL

//4)、basic_string &assign( const char *str, size_type num );字符串的前几个重新赋值
s.assign("Java Html SQL",4);
cout << s;//输出:Java

//5)、basic_string &assign( size_type num, char ch );  以num个ch字符赋值
s.assign('C',10);
cout << s;//输出:CCCCCCCCCC

删除

//erase()
// basic_string &erase( size_type index = 0, size_type num = npos );从index的位置删除num个字符
string s("C C++ Python ...");
s.erase(12,4);
cout << s;//输出:C C++ Python

//删除全部
s.erase(0,s.length());

比较

//1、重载比较运算符,结果真与假  a>b  a<b  a>=b  a<=b .....

//2、compare()函数
/*
注意:
两个字符串相同,返回0。
调用字符串小于被调用字符串,返回-1。
调用字符串大于被调用字符串,返回1。*/

string s("123456");
//1)、int compare( const basic_string &str );比较两个对象
string s2("123");
cout << s.compare(s2);

//2)、int compare( const char *str );比较对象与字符串
cout << s.compare("12");

//3)、int compare( size_type index, size_type length, const basic_string &str );本对象的一段与str对象进行比较   index开始,index+length结束
string s3("886");
cout << s.compare(0,3,s3);

//4)、int compare( size_type index, size_type length, const basic_string &str, size_type index2,size_type length2 );  本对象的一段与另一个string对象的一段比较
string s3("886");
cout << s.compare(0,3,s3,0,2);

复制

//copy()  size_type copy( char *str, size_type num, size_type index );将对象中的某一段复制进一个字符数组中
string s("777");
char str[10] = {"666"};
s.copy(str,0,1);

查找子串

//find()  返回值为字串位置
string s("789456");
//1、size_type find( const basic_string &str, size_type index );从index的位置查找str
string s2("45");
s.find(s2,0);

//2、size_type find( const char *str, size_type index );从index位置查找str
char str[10] = {"89"};
s.find(str,1);

//3、size_type find( char ch, size_type index ); 从index的位置查找字符ch
char c = '6';
s.find(c,0);

返回字串与交换


string s("C++ Rust Ue5 Python Java HTML CSS");
//1、substr()返回子串
//substr( size_type index, size_type num = npos );
string s2 = s.substr(0,3);
cout << s2;//输出:C++

//swap()交换对象
//swap( basic_string &str );
s.swap(s2);
cout << s2;//输出:C++ Rust Ue5 Python Java HTML CSS
cout << s;//输出:C++

运算符重载

输入输出
	<<
	>>
		friend
下标运算
	[]
赋值
	+=
	=
比较
	==
	>
	<
	>=
	<=
	!=
计算
	+

迭代器

定义string迭代器string iterator ite;
意义:指向string对象的指针、本质上相当于 一个char* 的指针

用法:

//注意: string::begin()  第一个字符   string::end()  最后一个字符的下一个

//遍历:
//1、
for (ite = str.begin();ite != str.end(); ite++)
{
	cout << *ite;
}
//2、
for (size_t i = 0;i < str.size(); i++)
{
	cout << ite[i];
}

//赋值
//1、
for (ite = str.begin();ite != str.end(); ite++)
{
	*ite = ‘a’;
}

//2、
for (size_t i = 0;i < str.size(); i++)
{
	ite[i] = 'a';
}

可以看出,迭代器和指针用法是差不多的
为什么不定义成char*呢?
因为我们这个迭代器是要跟算法连接的,它适用于所有的容器,即一个通用类型的指针

迭代器失效
原因:string重新申请空间的时候,迭代器会失效

关于迭代器的一些函数
1、iterator begin();返回指向第一个字符的迭代器
2、iterator end();返回最后一个元素的下一个迭代器
3、append( input_iterator start, input_iterator end ); 在末尾添加start—end 这么多的字符
4、iterator erase( iterator pos );删除指定iterator
5、iterator erase( iterator start, iterator end );删除start—end 这么多的iterator
6、void insert( iterator i, size_type num, const char &ch );在i这个iterator后面添加num个ch字符
7、void insert( iterator i, iterator start, iterator end );在i这个iterator后面添加start—end这么多字符

算法

头文件#include <algorithm>

//遍历一个string类:
/*template<class InputIterator, class Function>
Function for_each(InputIterator _First,  InputIterator _Last, Function _Func );*/
//参数1、2:遍历First---Last之间的字符
//参数3如下:
void func(char c)//参数为该容器的类型
{
	cout << c;//输出就ok了
}
string s("123");
for_each(s.begin(),s.end(),func);//输出:123


//排序
//1、从小到大
/*template<class RandomAccessIterator>
void sort(RandomAccessIterator _First, RandomAccessIterator _Last );*/
//参数1、2:迭代器
string s2("4896752");
sort(s.begin(),s.end());
cout << s2.c_str();//输出:2456789

//从小到大
/*template<class RandomAccessIterator, class Pr>
void sort( RandomAccessIterator _First,  RandomAccessIterator _Last, BinaryPredicate _Comp);*/
//参数1、2不变。参数3为greater<>()  --->先记住,以后讲
sort(s.begin(),s.end(),greater<>());
cout << s2.c_str();//输出:9876542

总结

大家好好复习
string类的第一部分

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。