当前位置: 首页 > news >正文

上饶网站建设株洲发布

上饶网站建设,株洲发布,网站内容页模板,网页翻译怎么弄出来提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 模板初阶的补充 一、C语言中的字符串 二、标准库中的string类 2.1 string类(了解) 2.2 string类的常用接口说明#xff08;注意下面我只讲解最常用的接口文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 前言 模板初阶的补充 一、C语言中的字符串 二、标准库中的string类 2.1 string类(了解) 2.2 string类的常用接口说明注意下面我只讲解最常用的接口 1. string类对象的常见构造 2.遍历string类类型的字符数组 3.反向迭代器 4. string类对象的容量操作 5. string类对象的访问及遍历操作 6. string类对象的修改操作 总结 前言 世上有两种耀眼的光芒一种是正在升起的太阳一种是正在努力学习编程的你!一个爱学编程的人。各位看官我衷心的希望这篇博客能对你们有所帮助同时也希望各位看官能对我的文章给与点评希望我们能够携手共同促进进步在编程的道路上越走越远 提示以下是本篇文章正文内容下面案例可供参考 模板初阶的补充 一、C语言中的字符串 C语言中字符串是以\0结尾的一些字符的集合为了操作方便C标准库中提供了一些str系列的库函数 但是这些库函数与字符串是分离开的不太符合OOP的思想而且底层空间需要用户自己管理稍不留神可能还会越界访问。 二、标准库中的string类 2.1 string类(了解) string类的文档介绍 字符串是表示字符序列的类标准的字符串类提供了对此类对象的支持其接口类似于标准字符容器的接口但添加了专门用于操作单字节字符字符串的设计特性。string类是使用char(即作为它的字符类型使用它的默认char_traits和分配器类型(关于模板的更多信 息请参阅basic_string)。string类是basic_string模板类的一个实例它使用char来实例化basic_string模板类并用char_traits 和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。注意这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列这个 类的所有成员(如长度或大小)以及它的迭代器将仍然按照字节(而不是实际编码的字符)来操作。 总结 string是表示字符串的字符串类该类的接口与常规容器的接口基本相同再添加了一些专门用来操作string的常规操作。string在底层实际是basic_string模板类的别名typedef basic_string string;不能操作多字节或者变长字符的序列。 在使用string类时必须包含#include头文件以及using namespace std; 2.2 string类的常用接口说明注意下面我只讲解最常用的接口 1. string类对象的常见构造 constructor(构造函数名称)功能说明string() 重点构造空的string类对象即空字符串string(const char* s) 重点用C-string来构造string类对象string(size_t n, char c)string类对象中包含n个字符cstring(const strings) 重点拷贝构造函数 string (const string str, size_t pos, size_t len npos); //在str字符串中从pos位置开始拷贝len个字符的长度 // npos是-1因为类型是无符号整型所以是最大的整数 void test_string1() {string s0;string s1(hello world);string s2(s1);//拷贝构造string s3(s1, 5, 3);string s4(s1, 5, 10);string s5(s1, 5);cout s0 endl;cout s1 endl;cout s2 endl;cout s3 endl;cout s4 endl;cout s5 endl;string s6(10, #);cout s6 endl;s0 s6;cout s0 endl; }int main() {test_string1();return 0; } 2.遍历string类类型的字符数组 方法一下标 [ ] void test_string2() {string s1(hello world);//遍历string类类型的字符数组// 方法一下标[] size:返回有多少个字符for (size_t i 0; i s1.size(); i){cout s1[i] ;//这两个是一样的//cout s1.operator[](i) ;//返回第i个位置的字符}cout endl;for (size_t i 0; i s1.size(); i){s1[i];//还可以对pos位置的字符进行修改}cout endl;for (size_t i 0; i s1.size(); i){cout s1[i] ;}cout endl;string s3(hello world);s3[0];cout s3 endl;cout s3.size() endl;cout s3.capacity() endl; }int main() {test_string2();return 0; } 方法二迭代器 void test_string2() {string s3(hello world);s3[0];cout s3 endl;//方法二迭代器string::iterator it3 s3.begin();//begin:获取第一个字符的位置while (it3 ! s3.end())//end:获取最后一个字符的下一个位置(是左闭右开的格式){cout *it3 ;it3;}cout endl;it3 s3.begin();while (it3 ! s3.end()){*it3 - 3;it3;}cout endl;cout typeid(it3).name() endl;//typeid查看一个对象的类型 }int main() {test_string2();return 0; } 方法三范围for循环 void test_string2() {string s3(hello world);s3[0];cout s3 endl;// 底层就是迭代器for (auto e : s3){cout e ;}cout endl; }int main() {test_string2();return 0; } 3.反向迭代器 void test_string3() {string s1(hello world);//反向迭代器string::reverse_iterator rit s1.rbegin();while (rit ! s1.rend()){cout *rit ;rit;}cout endl;// 可读可写string::iterator it2 s1.begin();while (it2 ! s1.end()){*it2 3;cout *it2 ;it2;}cout endl;// 只读const string s3(hello world);string::const_iterator it3 s3.begin();while (it3 ! s3.end()){// *it3 3;cout *it3 ;it3;}cout endl;// const_reverse_iterator }int main() {test_string3();return 0; } 4. string类对象的容量操作 函数名称功能说明size (重点)返回字符串有效字符长度length返回字符串有效字符长度capacity返回空间总大小empty (重点)检测字符串释放为空串是返回true否则返回falseclear (重点)清空有效字符reserve (重点)为字符串预留空间**resize (重点)将有效字符的个数改成n个多出的空间用字符c填充 string容量相关方法使用代码演示 注意 size()与length()方法底层实现原理完全相同引入size()的原因是为了与其他容器的接口保持一 致一般情况下基本都是用size()。clear()只是将string中有效字符清空不改变底层空间大小。resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个不同的是当字符个数增多时resize(n)用0来填充多出的元素空间resize(size_t n, char c)用字符c来填充多出的元素空间。注意resize在改变元素个数时如果是将元素个数增多可能会改变底层容量的大小如果是将元素个数减少底层空间总大小不变。reserve(size_t res_arg0)为string预留空间不改变有效元素个数当reserve的参数小于 string的底层空间总大小时reserver不会改变容量大小。 先来看 reserve(预留空间) 和 clear(清除数据) 操作 // reserve // 保留 // reverse // 反转 翻转 void test_string4() {string s1(hello worldxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx);cout s1.size() endl;cout s1.length() endl;cout s1.max_size() endl;cout s1.capacity() endl;// 查看扩容机制string s;s.reserve(100);//提前保留100个容量有可能比100个容量多(它是手动扩容)size_t sz s.capacity();cout capacity changed: sz \n;//第一次显示堆区上capacity空间的大小cout making s grow:\n;for (int i 0; i 100; i){s.push_back(c);//如果一直尾插到capacity空间的大小不够用的话capacity的大小会扩大(它是自动扩容)if (sz ! s.capacity())//新的capacity大小与旧的capacity大小的比较{sz s.capacity();cout capacity changed: sz \n;}}cout s1 endl;cout s1.capacity() endl;cout s1.size() endl;s1.clear();//clear清理数据的不回收空间cout s1 endl;cout s1.capacity() endl;cout s1.size() endl;// 缩容s1.shrink_to_fit();cout s1.capacity() endl;cout s1.size() endl; }int main() {test_string4();return 0; } 再来看 resize 的操作 void test_string5() {string s1(hello worldxxxxxx);cout s1.size() endl;cout s1.capacity() endl;// 比当前capacity大才会扩容s1.reserve(200);//reserve改变的容量resize改变的sizecout s1.size() endl;cout s1.capacity() endl;cout xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx endl;string s2(hello worldxxxxxx);cout s2.size() endl;cout s2.capacity() endl endl;s2.resize(10);//保留前10个数据cout s2.size() endl;cout s2.capacity() endl endl;s2.resize(20);//size 20 capacity保留了字符串剩下的默认用\0来补充cout s2.size() endl;cout s2.capacity() endl endl;s2.resize(100, x);// capacity 100扩容并插入xcout s2.size() endl;cout s2.capacity() endl endl; }int main() {test_string5();return 0; } 5. string类对象的访问及遍历操作 函数名称功能说明operator [] (重点)返回pos位置的字符const string类对象调用begin  endbegin获取一个字符的迭代器 end获取最后一个字符下一个位置的迭 代器rbegin  rendbegin获取一个字符的迭代器 end获取最后一个字符下一个位置的迭 代器范围forC11支持更简洁的范围for的新遍历方式 string元素访问及遍历代码演示 6. string类对象的修改操作 函数名称功能说明push_back在字符串后尾插字符cappend在字符串后追加一个字符串operator(重点)在字符串后追加字符串strc_str(重点)返回C格式字符串find  npos(重点)从字符串pos位置开始往后找字符c返回该字符在字符串中的位置rfind从字符串pos位置开始往前找字符c返回该字符在字符串中的位置substr在str中从pos位置开始截取n个字符然后将其返回 string中插入和查找等使用代码演示 注意 在string尾部追加字符时s.push_back(c) / s.append(1, c) / s c三种的实现方式差不多一般情况下string类的操作用的比较多操作不仅可以连接单个字符还可以连接字符串。对string操作时如果能够大概预估到放多少字符可以先通过reserve把空间预留好。 void test_string7() {string s1(xhello world);s1.push_back(!);cout s1 endl;s1.append(hello bit);cout s1 endl;s1.append(10, x);cout s1 endl;string s2( apple );//s1.append(s2);//cout s1 endl;s1.append(s2.begin(), --s2.end());cout s1 endl;string s3(hello world);s3 ;s3 apple;cout s3 endl; }int main() {test_string7();return 0; } insert 、 erase 和 replace 的操作 void test_string8() {string s1(xhello world);cout s1 endl;s1.assign( xxxxx);//assign覆盖字符串的操作cout s1 endl;s1.insert(0, yyyy);//在pos位置之前插入cout s1 endl;s1.erase(5, 3);//从第5个位置开始向后删除3个字符cout s1 endl;s1.erase();//删除字符串cout s1 endl;string s2(hello world hello bit);/*s2.replace(5, 1, 20%);//从第5个位置开始替换一个字符为%20cout s2 endl;*//*size_t pos s2.find( );while (pos ! string::npos){s2.replace(pos, 1, 20%);pos s2.find( );//替换完了继续查找 字符}cout s2 endl;*/// insert/erase/replace// 能少用就要少用因为基本都要挪动数据效率不高string s3;s3.reserve(s2.size());//提前保留好空间(s2字符的数量)for (auto ch : s2){//如果ch变量等于空格则把字符拷贝下来否则就将空格变为%20if (ch ! ){s3 ch;}else{s3 20%;}}cout s3 endl;s2.swap(s3);cout s2 endl; }int main() {test_string8();return 0; } 总结 好了本篇博客到这里就结束了如果有更好的观点请及时留言我会认真观看并学习。不积硅步无以至千里不积小流无以成江海。
http://www.pierceye.com/news/498807/

相关文章:

  • 深圳企业模板网站建设做高性能的网站 哪门语言好
  • 网站后台不能上传微信公众平台网页版登陆
  • 广州网站营销seo费用成都建设网站那家好
  • 网站建设规划书结构简单wordpress
  • 域名注册网站哪个好山东淄博网络科技有限公司
  • 固始县网站建设培训怎么制作网站首页
  • 产品经理做网站三河市最新消息
  • 做新闻类网站需要什么资质如何外贸seo网站建设
  • 注册网站流程和费用百度seo关键词排名s
  • 做推广网站的去哪能买到有效资料苏州建设网站找网络公司
  • vs做网站如何输出怎么做flash网站
  • 网站做政务广告传媒公司简介ppt
  • 番茄网络营销策划方案seo网站培训
  • 自己做一网站高唐网页定制
  • 快速网站seo效果什么是网络营销与概念
  • 个体网站建设企业网站做的好的有什么公司
  • 建设银行网站短信错误6次wordpress个人淘客
  • 让网站快速收录最新集团公司网站案例
  • 网站开发公司长春高校 网站建设实施方案
  • 我做的网站打开慢怎么处理防控措施有这些优化
  • 网站的登录界面是怎么做的网站开发 职位
  • 西安英文网站制作企业年报申报入口官网
  • 做一网站多少钱企业官方网站建设教程
  • 自己建的网站能用吗海南网站建设哪家好
  • 网络公司网站模板html网站制作 数据库
  • 温州哪里有网站优化南通营销网站建设
  • 怎么在网站标头做图标wordpress 远程数据库
  • 厦门做手机网站公司最新常州网页制作招聘
  • 施工企业农民工工资专项检查报告百度seo怎么把关键词优化上去
  • 圆通速递我做网站sydney wordpress