【C++STL】string类
@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类的第一部分
- 点赞
- 收藏
- 关注作者
评论(0)