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

做免费资料分享网站会不会涉及版权现在lol谁做教学视频网站

做免费资料分享网站会不会涉及版权,现在lol谁做教学视频网站,软件开发各阶段工作量比例,网址链接查询现在一般不再使用传统的char*而选用C标准程序库中的string类#xff0c;是因为string标准程序和char*比较起来#xff0c;不必担心内存是否足够、字符串长度等等#xff0c;而且作为一个类出现#xff0c;集成的操作函数足以完成大多数情况下(甚至是100%)的需要。比如…现在一般不再使用传统的char*而选用C标准程序库中的string类是因为string标准程序和char*比较起来不必担心内存是否足够、字符串长度等等而且作为一个类出现集成的操作函数足以完成大多数情况下(甚至是100%)的需要。比如可以用 进行赋值操作 进行比较 做串联。尽可以把它看成是C的基本数据类型。C是将面向过程的C语言和面向对象的Java语言拼接到一起而组成的一种高级语言。标准模板库STL提供了一个std::string类其是std::basic_string的一个特化它是一个容器类可把字符串当作普通类型来使用并支持比较、连接、遍历、STL算法、复制、赋值等等操作这个类定义在string头文件中。#include string //注意这里不是string.h string.h是C字符串头文件 1声明一个C字符串std::string类的构造函数 声明一个字符串变量很简单string Str;这样就声明了一个字符串变量但既然是一个类就有构造函数和析构函数。上面的声明没有传入参数所以就直接使用了string的默认的构造函数这个函数所作的就是把Str初始化为一个空字符串。String类的构造函数和析构函数如下 a) string s(); //生成一个空字符串s b) string s(str) //拷贝构造函数 生成str的复制品string(const string str) c) string s(str,stridx) //将字符串str内始于位置stridx的部分当作字符串的初值 d) string s(const string str, size_type pos,strlen) //将字符串str内始于pos且长度顶多strlen的部分作为字符串的初值 e) string s(const char *C) //将C字符串作为s的初值 f) string s(const char* str, size_type n) //使用字符串str的前n个字符初始化作为字符串s的初值。 g) string s(int num,char c) //生成一个字符串包含num个c字符 h) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值 i) s.~string() //销毁所有字符释放内存当构造的string太长而无法表达时会抛出length_error异常 2字符串操作函数 这里是C字符串的重点先把各种操作函数罗列出来不喜欢把所有函数都看完的人可以在这里找自己喜欢的函数再到后面看他的详细解释。 a) ,assign() //赋以新值 b) swap() //交换两个字符串的内容 c) ,append(),push_back() //在尾部添加字符 d) insert() //插入字符 e) erase(int nStart,int nEnd) //删除nStart—nEnd位置字符 f) clear() //删除全部字符 g) replace() //替换字符 h) //串联字符串 i) ,!,,,,,compare() //比较字符串 j) size(),length() //返回字符数量 k) max_size() //返回字符的可能最大个数 l) empty() //判断字符串是否为空 m) capacity() //返回重新分配之前的字符容量 n) reserve() //保留一定量内存以容纳一定数量的字符 o) [ ], at() //存取单一字符 p) ,getline() //从stream读取某值 q) //将谋值写入stream r) copy() //将某值赋值为一个C_string s) c_str() //将内容以C_string返回 t) data() //将内容以字符数组形式返回 u) substr() //返回某个子字符串 v)查找函数 w)begin() end() //提供类似STL的迭代器支持 x) rbegin() rend() //逆向迭代器 y) get_allocator() //返回配置器 下面详细介绍 2.1 C字符串和C字符串的转换 C 提供的由C字符串得到对应的C_string的方法是使用data()、c_str()和copy()其中data()以字符数组的形式返回字符串内容但并不添加’\n’。c_str()返回一个以‘\n’结尾的字符数组而copy()则把字符串的内容复制或写入既有的c_string或字符数组. 22 大小和容量函数 一个C字符 串存在三种大小 现有的字符数函数是size()和length()他们等效。Empty()用来检查字符串是否为空。max_size() 这个大小是指当前C字符串最多能包含的字符数很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。不够用的话会抛出length_error异常capacity()重新分配内存之前 string所能包含的最大字符数。这里另一个需要指出的是reserve()函数这个函数为string重新分配内存。重新分配的大小由其参数决定 默认参数为0这时候会对string进行非强制性缩减。 还有必要再重复一下C字符串和C字符串转换的问题许多人会遇到这样的问题自己做的程序要调用别人的函数、类什么的比如数据库连接函数Connect(char*,char*)但别人的函数参数用的是char*形式的而我们知道c_str()、data()返回的字符数组由该字符串拥有所以是一种const char*,要想作为上面提及的函数的参数还必须拷贝到一个char*,如果 此函数对参数(也就是char*)的内容不修改的话可以进行强制类型的转换比如Connect((char*)UserID.c_str(), (char*)PassWD.c_str()),但是这时候是存在危险的因为这样转换后的字符串其实是可以修改的所以强调除非函数调用的时候不对参数进行修改否则必须拷贝到一个char*上去。当然更稳妥的办法是无论什么情况都拷贝到一个char*上去。 23元素存取 可以使用下标操作符[]和函数at()对元素包含的字符进行访问。但是应该注意的是操作符[]并不检查索引是否有效有效索引0~str.length()如果索引失效会引起未定义的行为。而at()会检查如果使用 at()的时候索引无效会抛出out_of_range异常。有一个例外不得不说const string a;的操作符[]对索引值是a.length()仍然有效其返回值是’’。其他的各种情况a.length()索引都是无效的。举例如下 const string Cstr(const string); string Str(string);Str[3]; //ok Str.at(3); //okStr[100]; //未定义的行为 Str.at(100); //throw out_of_rangeStr[Str.length()] //未定义行为 Cstr[Cstr.length()] //返回 ‘’ Str.at(Str.length());//throw out_of_range Cstr.at(Cstr.length()) throw out_of_range我不赞成类似于下面的引用或指针赋值 char rs[2]; char* p s[3]; 因为一旦发生重新分配r,p立即失效。避免的方法就是不使用。24比较函数 C 字符串支持常见的比较操作符,,,,,!甚至支持string与C-string的比较(如 strhello)。在使用,,,这些操作符的时候是根据当前字符特性将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小比较的顺序是从前向后比较遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。同时string (aaaa) string(aaaaa)。 另一个功能强大的比较函数是成员函数compare()。他支持多参数处理支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果返回值意义如下0-相等 0-大于 0-小于。举例如下 string s(abcd); s.compare(abcd); //返回0 s.compare(dcba); //返回一个小于0的值 s.compare(ab); //返回大于0的值 s.compare(s); //相等 s.compare(0,2,s,2,2); //用ab和cd进行比较 小于零 s.compare(1,2,bcx,2); //用bc和bc比较。25 更改内容 这在字符串的操作中占了很大一部分。 首先讲赋值第一个赋值方法当然是使用操作符新值可以是string(如sns) 、c_string(如sgaint)甚至单一字符如s’j’。还可以使用成员函数assign()这个成员函数可以使你更灵活的对字符串赋值。还是举例说明吧 s.assign(str); //不说 s.assign(str,1,3);//如果str是iamangel 就是把ama赋给字符串 s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s s.assign(gaint); //不说 s.assign(nico,5);//把’n’ ‘I’ ‘c’ ‘o’ ‘’赋给字符串 s.assign(5,’x’);//把五个x赋给字符串 把字符串清空的方法有三个s;s.clear();s.erase(); string提供了很多函数用于插入insert、删除erase、替换replace、增加字符。 先说增加字符这里说的增加是在末尾上函数有 、append()、push_back()。举例如下 sstr;//加个字符串 smy name is jiayp;//加个C字符串 s’a’;//加个字符 s.append(str); s.append(str,1,3);//不解释了 同前面的函数参数assign的解释 s.append(str,2,string::npos)//不解释了 s.append(my name is jiayp); s.append(nico,5); s.append(5,’x’);2.5.1、在字符串结尾插入其他元素。 s.push_back(‘a’);//这个函数只能增加单个字符 对STL熟悉的理解起来很简单2.5.2、 在指定位置插入字符串或字符。 也许你需要在string中间的某个位置插入字符串这时候你可以用insert()函数这个函数需要你指定一个安插位置的索引被插入的字符串将放在这个索引的后面。 s.insert(0,my name); s.insert(1,str); 这种形式的insert()函数不支持传入单个字符这时的单个字符必须写成字符串形式。为了插 入单个字符insert()函数提供了两个对插入单个字符操作的重载函数insert(size_type index,size_type num,chart c)和insert(iterator pos,size_type num,chart c)。其中size_type是无符号整数iterator是char*,所以你这么调用insert函数是不行的insert(0,1, ’j’);这时候第一个参数将转换成哪一个呢所以你必须这么写insert((string::size_type)0,1,’j’)第二种形式指出了使用迭代器安插字符的形式在后面会提及。顺便提一下string有很多操作是使用STL的迭代器的他也尽量做得和STL靠近。 删除函数erase()的形式也有好几种替换函数replace()也有好几个。举例吧 string sil8n; s.replace(1,2,nternationalizatio);//从索引1开始的2个替换成后面的C_string 2.5.3、 删除字符串的某一部分。 s.erase(13);//从索引13开始往后全删除 s.erase(7,5);//从索引7开始往后删5个26提取子串和字符串连接 提取子串的函数是substr(),形式如下 s.substr();//返回s的全部内容 s.substr(11);//从索引11往后的子串 s.substr(5,6);//从索引5开始6个字符 把两个字符串结合起来的函数是。27输入输出操作 1 从输入流读取一个string。 2 把一个string写入输出流。 另一个函数就是getline(),他从输入流读取一行内容直到遇到分行符或到了文件尾。28搜索与查找 std::string类的查找函数 查找函数很多功能也很强大包括了 find() rfind() find_first_of() find_last_of() find_first_not_of() find_last_not_of() 这些函数返回符合搜索条件的字符区间内的第一个字符的索引没找到目标就返回npos。所有的函数的参数说明如下 第一个参数是被搜寻的对象。第二个参数可有可无指出string内的搜寻起点索引第三个参数可有可无指出搜寻的字符个数。最后再说说npos的含义string::npos的类型是string::size_type,所以一旦需要把一个索引与npos相比这个索引值必须是string::size)type类型的更多的情况下我们可以直接把函数和npos进行比较如if(s.find(jia) string::npos)。 3.1、使用STL算法 std::string name marius;// 使字符串全为大写 std::transform(name.begin(), name.end(), name.begin(),toupper); std::string name marius; // 升序排列字符串 std::sort(name.begin(), name.end()); std::string name marius; // 反转字符串 std::reverse(name.begin(), name.end()); bool iswhitespace(char ch) { return  ch || ch t || ch v || ch r || ch n; } std::string name marius  ; // 删除空白字符 std::string::iterator newend std::remove_if(name.begin(), name.end(), iswhitespace); name.erase(newend); std::string类的替换函数 函数1 std::string replace(size_type pos1, size_type n1, const std::string str, size_type pos2 0, size_type n2 npos); 该函数的作用使用str字符串从位置pos2开始的n2个字符替换当前字符串从pos1位置开始处的n1个字符。 可以这样理解该函数将当前字符串从pos1开始的n1个字符全部删除然后再用str整个字符串或者str从pos2开始的n2个字符从pos1位置开始填入到当前字符串中。 提醒如果n1或者n2的数值超出了对应字符串的长度以实际长度为准不会出现访问越界的情况。 注意 a、如果pos1指定的位置超出当前字符串的范围抛出std::out_of_range异常不捕捉将导致coredump。 b、如果pos2指定的位置超出替换字符串str的范围抛出std::out_of_range异常不捕捉将导致coredump。 函数2 std::string replace(size_type pos, size_type n1, const char * s, size_type n2); 该函数的作用使用字符串s的前n2个字符替换当前字符串从pos位置开始处的n1个字符。 可以这样理解函数将当前字符串从pos开始的n1个字符全部删除然后再用字符串s的前n2个字符填入到当前字符串中。类似于函数1的pos2等于0必须指定n2的这种情况但也有一点的差别下面会注意里描述这种差别。 注意 a、如果pos指定的位置超出当前字符串的范围抛出std::out_of_range异常不捕捉将导致coredump。 b、该函数不会判断字符串s和n2的大小关系它严格地从s起始处拷贝n2个字符到指定位置。如果n2表示的长度超出了s的范围它会读取s后面的内存空间有可能会因为内存访问越界而coredump。但函数1的n2可以超出范围它以实际长度为准。 函数3 std::string replace(size_type pos, size_type n1, const char* s); 该函数的作用使用以为结尾的字符串s替换当前字符串从pos位置开始处的n1个字符。 可以这样理解函数将当前字符串从pos开始的n1个字符全部删除然后再用字符串s从开始到以结束的所有字符从pos位置开始填入到当前字符串中。 注意如果pos指定的位置超出当前字符串的范围抛出std::out_of_range异常不捕捉将导致coredump。 函数4 std::string replace(size_type pos, size_type n1, size_type n2, char c); 该函数的作用使用n2个c表示的字符替换当前字符串从pos位置开始处的n1个字符。 可以这么理解函数将当前字符串从pos开始的n1个字符全部删除然后再用n2个c字符从pos位置开始填入到当前字符串中。 注意如果pos指定的位置超出当前字符串的范围抛出std::out_of_range异常不捕捉将导致coredump。 函数5 std::string replace(iterator i1, iterator i2, const std::string str); 该函数的作用使用字符串str替换当前字符串[i1,i2)之间的字符。 函数6 std::string replace(iterator i1, iterator i2, const char* s, size_type n); 该函数的作用使用字符串s的前n个字符替换当前字符串[i1,i2)之间的字符。 函数7 std::string replace(iterator i1, iterator i2, const char* s); 该函数的作用使用以结尾的字符串s替换当前字符串[i1,i2)之间的字符。 函数8 std::string replace(iterator i1, iterator i2, size_type n, char c); 该函数的作用使用n个c表示的字符替换当前字符串[i1,i2)之间的字符。 std::string类的内部类型定义 typedef traits traits_type; typedef typename traits::char_type value_type; typedef size_t size_type; typedef Allocator allocator_type; typedef ptrdiff_t difference_type; typedef Allocator allocator_type; typedef Allocator allocator_type; typedef Allocator allocator_type; typedef charT reference; typedef const charT const_reference; typedef charT* pointer; typedef const charT* const_pointer; typedef pointer iterator; typedef const_pointer const_iterator; typedef ::reverse_iterator reverse_iterator; typedef ::reverse_iterator const_reverse_iterator; static const size_type npos static_cast(-1); std::string类的赋值运算符 string operator (const char* s); string operator (char c); string operator (const string rhs); string operator (const char* s); string operator (char c); string operator (const string lhs, const string rhs); string operator (const char* lhs, const string rhs); string operator (char lhs, const string rhs); string operator (const string lhs, const char* rhs); string operator (const string lhs, char rhs); std::string类的逻辑运算符 bool operator (const string lhs, const string rhs); bool operator (const char* lhs, const string rhs); bool operator (const string lhs, const char* rhs); bool operator! (const string lhs, const string rhs); bool operator! (const char* lhs, const string rhs); bool operator! (const string lhs, const char* rhs); bool operator (const string lhs, const string rhs); bool operator (const char* lhs, const string rhs); bool operator (const string lhs, const char* rhs); bool operator (const string lhs, const string rhs); bool operator (const char* lhs, const string rhs); bool operator (const string lhs, const char* rhs); bool operator (const string lhs, const string rhs); bool operator (const char * lhs, const string rhs); bool operator (const string lhs, const char * rhs); bool operator (const string lhs, const string rhs); bool operator (const char* lhs, const string rhs); bool operator (const string lhs, const char* rhs); istream operator (istream, string ); ostream operator (ostream, const string ); istream getline (istream, string , char delim n); 参考链接 https://en.cppreference.com/w/cpp/string/basic_stringhttps://en.cppreference.com/w/cpp/string/basic_string/basic_string
http://wiki.neutronadmin.com/news/262256/

相关文章:

  • 天河商城网站建设百度关键词seo年度费用
  • 佛山网站建设骏域网站建设专家网站建设公司圣辉友联
  • 北京顺义去哪找做网站的网站运维公司有哪些
  • 组建网站手机端网站建设步骤
  • 安卓手机网站开发怎样做私人网站
  • 佛山专业做网站公司上海的公司排行榜
  • 外贸开源网站爱山东app下载注册流程
  • 宝和网站建设营销策略有哪些4种
  • 算命购物网站建设附近小程序定制公司
  • 潍坊网站中国建设银行官网站大同
  • 如何做一家门户网站公司注册公司哪个好
  • 邢台做网站找谁建筑业大数据服务平台
  • 贵港网站建设网站建设 2015年11月
  • 外贸自建站的推广方式seo软文推广工具
  • 怎样用模板做网站潍坊兆通网站建设
  • 晋城市公共事业建设局网站教你做吃的网站
  • 网站建设 珠海网站建设工作分解结构图或表
  • 网站建设学院江苏五星建设集团有限公司网站
  • 会员制网站搭建wordpress做汽配外贸是在哪个网站做
  • 专门做评测的网站有哪些404 没有找到网站 试试申请收录吧
  • 摇一摇抽签用什么网站做房地产网站开发商
  • 门户网站 模板阳江市招聘最新招聘
  • 网站维护主要是做哪些网站建设公司下载
  • 网站建设兰州天水网站建设公司
  • 网站运行需求WordPress发展史
  • 网站生成器apk怎么做应用软件设计过程
  • 广州网站制作开发环保网站查询碾米是否做备案
  • 网站seo排名优化软件数据分析网
  • 如何搭建网站杭州百度seo优化
  • 做网站被攻击谁的责任网站建设 技术方案模板