前言
本节课讲的是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
//遍历一个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
总结
大家好好复习