怎么做能打不开漫画网站,wordpress 禁用谷歌字体 地图,安徽网站建设获客企业,景区网站建设策划书一、string类
1、为什么要学习string#xff1f; C语言中#xff0c;字符串是以\0结尾的一些字符的集合#xff0c;为了操作方便#xff0c;C标准库中提供了一些str系列的库函数#xff0c;但是这些库函数与字符串是分离开的#xff0c;不太符合OOP#xff08;面向对象…一、string类
1、为什么要学习string C语言中字符串是以\0结尾的一些字符的集合为了操作方便C标准库中提供了一些str系列的库函数但是这些库函数与字符串是分离开的不太符合OOP面向对象编程的思想而且底层空间需要用户自己管理稍不留神可能还会越界访问。在OJ中有关字符串的题目基本以string类的形式出现而且在常规工作中为了简单、方便、快捷基本都使用string类很少有人去使用C库中的字符串操作函数。 2、介绍 1. 字符串是表示字符序列的类。 2. 标准的字符串类提供了对此类对象的支持其接口类似于标准字符容器的接口但添加了专门用于操作单字节字符字符串的设计特性。 3. string类是使用char(即作为它的字符类型使用它的默认char_traits和分配器类型 4. string类是basic_string模板类的一个实例它使用char来实例化basic_string模板类并用char_traits和allocator作为basic_string的默认参数 5. 注意这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列这个类的所有成员(如长度或大小)以及它的迭代器将仍然按照字节(而不是实际编码的字符)来操作。 3、特点 1. string是表示字符串的字符串类 2. 该类的接口与常规容器的接口基本相同再添加了一些专门用来操作string的常规操作。 3. string在底层实际是basic_string模板类的别名typedef basic_stringchar, char_traits, allocator string; 4. 不能操作多字节或者变长字符的序列。 5、在使用string类时必须包含#include头文件以及using namespace std; 4、string类常用构造函数 1、string() 构造空的string类对象即空字符串重点 2、string(const char* s) 用C-string来构造string类对象重点 3、string(const strings) 拷贝构造函数重点 4、string(size_t n, char c) string类对象中包含n个字符c //空字符串string test1;//用C-string构造string类对象string test2(hello);//拷贝构造string test3 test1;string test4(test2);//使string对象包含n个字符string test5(5, a); 注意string类是重载了流插入和留提取运算符所以其对象可以直接使用cout和cin 这里只举例常见的构造具体可前往官网查看文档。 5、string类的析构函数 因为string类支持cin所以底层实现是右new操作符动态开辟空间的所以需要析构函数~string()释放但析构函数是自动调用的所以平时可以不管。 6、string类对象的遍历和访问 1、利用流插入运算符重载 2、string类运算符重载了[ ]所以可以用[ ]进行读写注意[ ]重载提供了两个版本有个版本用const修饰了this指针返回值也会const引用所以只可读不能写具体查看文档 int main()
{string s1(hello world);//读for (int i 0; i s1.size(); i){cout s1[i] ;}cout endl;//写:字符串逆序int begin 0;int end s1.size() - 1;while (begin end){swap(s1[begin], s1[end]);begin;end--;}cout s1;return 0;
} 3、利用迭代器iterator用法像指针 int main()
{string s1(hello);string::iterator it s1.begin();while (it ! s1.end()){cout *it ;it;}cout endl;return 0;
}这里begin()指向第一个位置end()指向数据内容的后一个位置 因为[ ]只适合部分容器如树形、哈希结构、链式结构等等只能用迭代器迭代器才是容器访问的主流。 知道了迭代器那么容器逆序可以用一个函数模版 reverse(s1.begin(), s1.end()); reverse函数需要左闭右开的区间而迭代器的begin和end刚好满足。 需要注意迭代器的两个写法 4、范围for适用于多种容器相比上述几种方式是最便捷的但底层会替换成迭代器 string s1(hello);for (auto e : s1)
{cout e ;
}
cout endl;