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

长沙企业网站排名快速seo优化

长沙企业网站排名,快速seo优化,零基础学网站建设,深度网目录 一、简介: 二、string的构造函数 三、string的赋值操作 四、string的取值和修改操作 4.1、string的取值和修改操作 4.2、字符串的取值和修改操作之at方法和重载operator[]方法的区别 五、string的拼接操作 六、string的查找和替换操作 七、string的比较…

目录

一、简介:

二、string的构造函数

三、string的赋值操作

四、string的取值和修改操作

4.1、string的取值和修改操作

 4.2、字符串的取值和修改操作之at方法和重载operator[]方法的区别

五、string的拼接操作

六、string的查找和替换操作

七、string的比较操作

八、string的子串、插入和删除操作

九、string的C风格和C++风格


一、简介:

string中文意思是字符串,string是一个类,在C++语言中,string类型不属于基础类型,string是一个模板类,实例化就是一个对象。也可以理解为他是一个可以操作字符串的类。

基础类型有八种:byte、boolean、char、short、int、float、long、double

string模板类原型:

template <class CharT, class Traits = std::char_traits<CharT>, class Allocator = std::allocator<CharT>>
class basic_string;

        定义了一个名为basic_string的模板类,它有三个模板参数:CharTTraitsAllocator。这些参数分别指定了字符类型、字符特性和分配器类型用于分配内存。

CharT参数表示字符类型,通常使用char来表示普通的字符串。Traits参数表示字符操作的特性,比如比较、复制等。Allocator参数表示内存分配器类型,用于在运行时分配和释放内存。

 

二、string的构造函数

string类

 * string();//默认无参构造函数
 * string(const string &str);//默认拷贝构造函数
 * string(const char *str);//有一个参数的有参构造函数,使用char *类型初始化string对象
 * string(int n,char c);//有两个参数的有参构造函数,第一个参数表示使用的数量,第二个参数表示数据,即使用n个字符c 初始化string对象

#include <iostream>
#include<string>
using namespace std;/** string();//默认无参构造函数* string(const string &str);//默认拷贝构造函数* string(const char *str);//有一个参数的有参构造函数,使用char *类型初始化string对象* string(int n,char c);//有两个参数的有参构造函数,第一个参数表示使用的数量,第二个参数表示数据,即使用n个字符c 初始化string对象*/void test(){string str1("hello,world!");//有一个参数的有参构造函数,string类的对象是str1cout<<str1<<endl;//可以直接把对象当做字符串遍历string str2(9,'H');//有两个参数的有参构造函数。string类的对象是str2cout<<str2<<endl;string str3(str1);//拷贝构造函数cout<<str3<<endl;const char *str4="hello,string类";string str5(str4);//一个参数的有参构造函数cout<<str5<<endl;
}int main()
{test();//调用函数return 0;
}

输出结果:

注意 char *str4="hello,string类";虽然编译通过,但是会报警告,因为这是错误的写法,"hello,string类"是一个常量,而char *str4是一个指针类型变量,正确的写法应该是 加const修饰,修饰指针不可更改,即const *str4="hello,string类";

三、string的赋值操作

   string &operator=(const char *s);//重载赋值运算符,使用c风格的字符串类型赋值给当前对象
    string &operator =(const string &str);//把str对象赋值给当前对象
    string &operator =(char c);//字符赋值给当前对象
    string &assign(const char *s);//把字符串赋值给当前对象
    string &assign(const char *s,int n);//把字符串s的前n个字符赋值给当前对象
    string &assign(const string &s);//把字符串s赋值给当前对象
    string &assign(int n,char c);//用n个字符c赋值给当前对象
    string &assign(const string &s,int start,int n);//将s从start开始的n个字符赋值给当前对象
  

#include <iostream>
#include<string>
using namespace std;void test1(){/*string &operator=(const char *s);//重载赋值运算符,使用c风格的字符串类型赋值给当前对象string &operator =(const string &str);//把str对象赋值给当前对象string &operator =(char c);//字符赋值给当前对象string &assign(const char *s);//把字符串赋值给当前对象string &assign(const char *s,int n);//把字符串s的前n个字符赋值给当前对象string &assign(const string &s);//把字符串s赋值给当前对象string &assign(int n,char c);//用n个字符c赋值给当前对象string &assign(const string &s,int start,int n);//将s从start开始的n个字符赋值给当前对象*/string str1;str1="hello,stringC风格赋值操作";string str2;str2=str1;//对象赋值string str3;str3='H';//字符赋值string str4;const char *str0="hello,C风格的字符串";str4.assign(str0);//C风格字符串通过assign函数赋值string str5;str5.assign(str0,5);//前5个字符赋值给当前对象string str6;str6.assign(str5);//把str5对象赋值给str6对象string str7;str7.assign(9,'H');//把9个H赋值给当前对象string str8;str8.assign(str4,5,4);//将str4的从第五个字符开始的4个字符赋值给当前对象//遍历8个对象cout<<str1<<endl;cout<<str2<<endl;cout<<str3<<endl;cout<<str4<<endl;cout<<str5<<endl;cout<<str6<<endl;cout<<str7<<endl;cout<<str8<<endl;}int main()
{test1();//调用函数return 0;
}

输出结果:

注意:一个汉字,占两个字符 ,这里使用的是Qt软件 编码格式使用默认的system,一般是utf8编码

四、string的取值和修改操作

4.1、string的取值和修改操作

   /*
   char &operator[](int n);//重载[]运算符,n是下标
   char &at(int n);//通过at方法获取下标为n的元素
   */

#include <iostream>
#include<string>
using namespace std;void test2(){/*char &operator[](int n);//重载[]运算符,n是下标char &at(int n);//通过at方法获取下标为n的元素*/string str1="hello,string类";//赋值运算符赋值初始化,一般不建议,在这里可以用,因为是常量,不会发生隐式转换string str2("hello,string类");//直接赋值初始化,建议使用该方法str2[4]='H';//将字符串第五个元素改为Hcout<<str2<<endl;cout<<str2[4]<<endl;str1.at(1)='E';//使用at方法取值然后修改值cout<<str1<<endl;cout<<str1[1]<<endl;}int main()
{test2();//调用函数return 0;
}

输出结果:

 4.2、字符串的取值和修改操作之at方法和重载operator[]方法的区别

使用重载operator[]运算符方法,下标越界不会抛出异常

#include <iostream>
#include<string>
using namespace std;void test2(){/*char &operator[](int n);//重载[]运算符,n是下标char &at(int n);//通过at方法获取下标为n的元素*/string str1="hello,string类";//赋值运算符赋值初始化,一般不建议,在这里可以用,因为是常量,不会发生隐式转换string str2("hello,string类");//直接赋值初始化,建议使用该方法str2[4]='H';//将字符串第五个元素改为Hcout<<str2<<endl;cout<<str2[4]<<endl;str1.at(1)='E';//使用at方法取值然后修改值cout<<str1<<endl;cout<<str1[1]<<endl;try{str1[100000]='H';//数组下标访问越界,使用operator[]方法不会抛出异常}catch(exception &str){cout<<str.what()<<endl;//接收来自try的异常}printf("hello,string测试\n");//测试}int main()
{test2();//调用函数return 0;
}

输出结果:

使用at方法,下标越界会抛出异常

#include <iostream>
#include<string>
using namespace std;void test2(){/*char &operator[](int n);//重载[]运算符,n是下标char &at(int n);//通过at方法获取下标为n的元素*/string str1="hello,string类";//赋值运算符赋值初始化,一般不建议,在这里可以用,因为是常量,不会发生隐式转换string str2("hello,string类");//直接赋值初始化,建议使用该方法str2[4]='H';//将字符串第五个元素改为Hcout<<str2<<endl;cout<<str2[4]<<endl;str1.at(1)='E';//使用at方法取值然后修改值cout<<str1<<endl;cout<<str1[1]<<endl;try{//str1[100000]='H';//数组下标访问越界,使用operator[]方法不会抛出异常str1.at(100000)='H';//抛出异常,程序不会终止}catch(exception &str){cout<<str.what()<<endl;//接收来自try的异常}printf("hello,string测试\n");//测试}int main()
{test2();//调用函数return 0;
}

输出结果:

tips:at方法抛出异常之后,程序不终止,且抛出异常提示,该大小只有14个字节,100000超过

五、string的拼接操作

  /*
    string &operator+=(const string &str);//重载+=运算符
    string &operator +=(const char *str);//c风格
    string &operator +=(const char c);
    string &append(const char *s);//append追加方法
    string &append(const char *str,int n);
    string &append(const string &s);
    string &append(const string &s,int pos,int n);
    string &append(int n,char c);
   */

#include <iostream>
#include<string>
using namespace std;void test3(){/*string &operator+=(const string &str);//重载+=运算符string &operator +=(const char *str);//c风格string &operator +=(const char c);string &append(const char *s);//append追加方法string &append(const char *str,int n);string &append(const string &s);string &append(const string &s,int pos,int n);string &append(int n,char c);*/string str1="hello,string";string str2=",world";str1+=str2;//两个对象相加赋值给str1对象string str3="hello,baby";str3+="欢迎来到这个世界!";//C风格相加string str4("you are welcome");str4+='H';//字符追加string str5("baby");str5.append("hello");//append方法追加string str6("god");str6.append("hello,string",2);//前两个追加给str6对象string str7("luck");str7.append(str6);string str8("hi");str8.append(str4,3,4);string str9("wow");str9.append(9,'Q');//遍历cout<<str1<<endl;cout<<str2<<endl;cout<<str3<<endl;cout<<str4<<endl;cout<<str5<<endl;cout<<str6<<endl;cout<<str7<<endl;cout<<str8<<endl;cout<<str9<<endl;
}int main()
{test3();//调用函数return 0;
}

输出结果:

六、string的查找和替换操作

  /*
    int find(const string &str,int pos=0) const;//查找str第一次出现的位置,从第pos位置开始查找
    int find(const char *s,int pos=0) const;//查找字符s第一次出现的位置,从pos位置开始查找
    int find(const char *s,int pos,int n) const;//从pos查找s的前n个字符在当前对象出现的位置
    int find(const char c,int pos=0) const;
    int rfind(const string &str,int pos=npos) const;//查找最后一次出现的位置
    int rfind(const char *s,int pos=npos) const;
    int rfind(const char *s,int pos,int n) const;
    int rfind(const char c,int pos=0) const;
    string &replace(int pos,int n,const string &str);//replace替换方法,从pos开始到n的位置的元素替换为str
    string &replace(int pos,int n,const char *s);
    */

#include <iostream>
#include<string>
using namespace std;void test4(){/*int find(const string &str,int pos=0) const;//查找str第一次出现的位置,从第pos位置开始查找int find(const char *s,int pos=0) const;//查找字符s第一次出现的位置,从pos位置开始查找int find(const char *s,int pos,int n) const;//从pos查找s的前n个字符在当前对象出现的位置int find(const char c,int pos=0) const;int rfind(const string &str,int pos=npos) const;//查找最后一次出现的位置int rfind(const char *s,int pos=npos) const;int rfind(const char *s,int pos,int n) const;int rfind(const char c,int pos=0) const;string &replace(int pos,int n,const string &str);//replace替换方法,从pos开始到n的位置的元素替换为strstring &replace(int pos,int n,const char *s);*/string str1="helllo,string";string str2="lll";int find1=str1.find(str2);int find2=str1.find("lll");int find3=str1.find("good",2,3);int find4=str1.find('h');int rfind5=str1.rfind(str2);//最后一次出现的位置,其实就是逆序查找int rfind6=str1.rfind("lll");int rfind7=str1.rfind("wow",1,2);int rfind8=str1.rfind('l');//替换replacestring str3="replace functions";string str4="#########";str3.replace(2,4,str4);//从下标为2开始的元素到下标为4结尾的元素替换为str4的元素string str5="good study";str5.replace(2,4,"嗨");string str6="http://www.good.sex.666.sex.age.999.age.com.cn";//将sex和age敏感词屏蔽,sex用*,age用#while (1) {int ret=str6.find("sex");int ret1=str6.find("age");if(ret==-1&&ret1==-1){break;}str6.replace(ret,3,"***");str6.replace(ret1,3,"###");}//遍历cout<<find1<<endl;cout<<find2<<endl;cout<<find3<<endl;cout<<find4<<endl;cout<<rfind5<<endl;cout<<rfind6<<endl;cout<<rfind7<<endl;cout<<rfind8<<endl;cout<<str3<<endl;cout<<str5<<endl;cout<<str6<<endl;}int main()
{test4();//调用函数return 0;
}

输出结果:

七、string的比较操作

 /*
    compare方法在>返回1,<返回-1,==返回0;
    字符比较根据ASCII码表进行比较
    int compare(const string &s) const;
    int compare(const char *s) const;
    */ 

#include <iostream>
#include<string>
using namespace std;void test5(){/*compare方法在>返回1,<返回-1,==返回0;字符比较根据ASCII码表进行比较int compare(const string &s) const;int compare(const char *s) const;*/string str1("hello,string");string str2("helllo,string");if(str1.compare(str2)==0){cout<<"相等"<<endl;}else if(str1.compare(str2)>0){cout<<"str1大于str2"<<endl;}else{cout<<"str1小于str2"<<endl;}if(str2.compare("hello")==0){cout<<"相等"<<endl;}else if(str2.compare("hello")>0){cout<<"str2大于'hello'"<<endl;}else{cout<<"str2小于'hello'"<<endl;}}int main()
{test5();//调用函数return 0;
}

输出结果:

 tips:通过输出结果可知compare方法是逐个字符进行比较

八、string的子串、插入和删除操作

 /*
    string substr(int pos=0,int n=npos) const;//返回由pos开始的到n组成的字符串
    string &insert(int pos,const char *s);//从pos位置插入s
    string &insert(int pos,const string &str);
    string &insert(int pos,int n,char c);//指定的位置pos插入n个c
    string &erase(int pos,int n=npos);//删除从pos开始的n个元素
    */

#include <iostream>
#include<string>
using namespace std;void test6(){/*string substr(int pos=0,int n=npos) const;//返回由pos开始的到n组成的字符串string &insert(int pos,const char *s);//从pos位置插入sstring &insert(int pos,const string &str);string &insert(int pos,int n,char c);//指定的位置pos插入n个cstring &erase(int pos,int n=npos);//删除从pos开始的n个元素*/string str1="hello,string";string str2=str1.substr(2,3);cout<<str2<<endl;string str3="hello,you are welcome in my eye you are beautiful";int s=0;while (1) {int ret=str3.find(" ",s);//find方法如果查找到了,返回下标位置,查找不到返回-1if(ret==-1){cout<<str3.substr(s,str3.size()-s)<<endl;break;}cout<<str3.substr(s,ret-s)<<endl;s=ret+1;}string str4="hello,string";str4.insert(3,"######");cout<<str4<<endl;str4.insert(1,str1);cout<<str4<<endl;str4.insert(2,4,'H');cout<<str4<<endl;string str5="good,good,stud";str5.erase(3,4);//删除3到4位置的元素cout<<str5<<endl;
}int main()
{test6();//调用函数return 0;
}

输出结果:

九、string的C风格和C++风格

/*
     * c语言中是没有string类型,因为string是类,是模板类,所以c语言使用指针来使用字符串
     * c++使用了C风格的字符串就是这么来的
     */ 

#include <iostream>
#include<string>
using namespace std;void test7(){/** c语言中是没有string类型,因为string是类,是模板类,所以c语言使用指针来使用字符串* c++使用了C风格的字符串就是这么来的*///C风格字符串const char *str1="hello,C_string";string str2=str1;cout<<str2<<endl;//c++风格字符串string str3="hello,C++_string";cout<<str3<<endl;//c++风格转换为c风格const char *str4=str3.c_str();cout<<str4<<endl;//使用c_str方法可以将c++对象转换为c语言风格的char指针类型
}int main()
{test7();//调用函数return 0;
}

输出结果:

string类的使用介绍完毕啦。

真心耗时


文章转载自:
http://euphorigenic.c7624.cn
http://fortuitism.c7624.cn
http://lucia.c7624.cn
http://tabourine.c7624.cn
http://procoagulant.c7624.cn
http://ovipara.c7624.cn
http://estonian.c7624.cn
http://decoction.c7624.cn
http://immaterialism.c7624.cn
http://ventriculoatrial.c7624.cn
http://hydrogenous.c7624.cn
http://toeshoe.c7624.cn
http://wherein.c7624.cn
http://abusively.c7624.cn
http://shogunate.c7624.cn
http://straggly.c7624.cn
http://lazarus.c7624.cn
http://overspray.c7624.cn
http://photomontage.c7624.cn
http://reticle.c7624.cn
http://chinatown.c7624.cn
http://sunnite.c7624.cn
http://distichous.c7624.cn
http://parachutist.c7624.cn
http://itemize.c7624.cn
http://excusatory.c7624.cn
http://amatory.c7624.cn
http://consomme.c7624.cn
http://mediocrity.c7624.cn
http://homopause.c7624.cn
http://directorate.c7624.cn
http://wren.c7624.cn
http://pyrosulphate.c7624.cn
http://veracious.c7624.cn
http://echinococci.c7624.cn
http://serous.c7624.cn
http://spelt.c7624.cn
http://siallite.c7624.cn
http://phs.c7624.cn
http://unimaginable.c7624.cn
http://noseguard.c7624.cn
http://egesta.c7624.cn
http://paita.c7624.cn
http://sophister.c7624.cn
http://succubae.c7624.cn
http://cerebroid.c7624.cn
http://elbow.c7624.cn
http://aardvark.c7624.cn
http://phosphorylase.c7624.cn
http://winterthur.c7624.cn
http://palaeanthropic.c7624.cn
http://helvetia.c7624.cn
http://taphonomy.c7624.cn
http://nacreous.c7624.cn
http://clodhopper.c7624.cn
http://briticism.c7624.cn
http://cyclecar.c7624.cn
http://plasticated.c7624.cn
http://subaquatic.c7624.cn
http://buttonholder.c7624.cn
http://urinogenital.c7624.cn
http://herl.c7624.cn
http://hamamatsu.c7624.cn
http://irritatingly.c7624.cn
http://purgatory.c7624.cn
http://bowwow.c7624.cn
http://dandyprat.c7624.cn
http://retread.c7624.cn
http://underpass.c7624.cn
http://dodad.c7624.cn
http://strati.c7624.cn
http://geraniol.c7624.cn
http://rejoneo.c7624.cn
http://estrangedness.c7624.cn
http://serenade.c7624.cn
http://commercialize.c7624.cn
http://wigan.c7624.cn
http://lyse.c7624.cn
http://whiffy.c7624.cn
http://medievalist.c7624.cn
http://bitartrate.c7624.cn
http://nudp.c7624.cn
http://excelled.c7624.cn
http://calorimetrist.c7624.cn
http://elias.c7624.cn
http://wisby.c7624.cn
http://nitrobacteria.c7624.cn
http://impinge.c7624.cn
http://attached.c7624.cn
http://pollinosis.c7624.cn
http://wisent.c7624.cn
http://moisture.c7624.cn
http://nonmonetary.c7624.cn
http://myelitic.c7624.cn
http://underside.c7624.cn
http://dillydally.c7624.cn
http://sernyl.c7624.cn
http://wattlebird.c7624.cn
http://topcap.c7624.cn
http://carnarvon.c7624.cn
http://www.zhongyajixie.com/news/52462.html

相关文章:

  • 珠海市品牌网站建设平台排名第一的助勃药
  • 做网站买什么空间营销策划公司取名大全
  • 展示型网站建设价格重庆放心seo整站优化
  • 网站优化 h几 更易被抓搜索引擎的网站
  • wordpress做了个站没流量做网站的费用
  • 国家政府网站建设指引软文网站有哪些
  • 个人网站备案出现公司名字怎么办当阳seo外包
  • 仙游县住房和城乡建设局网站公司软文代写
  • 无锡公司网站建设网上营销方式和方法
  • 深圳网站开发优化防控举措
  • 7个湖北seo网站推广策略东莞seo计费管理
  • 学校网站建设要点互联网精准营销
  • 在线看免费观看视频网站大全什么是淘宝seo
  • 如何做网站安全加固网站推广文章
  • webstation做网站地产渠道12种拓客方式
  • 做设计想接外单去哪个网站好经典广告
  • 手机网站报价表吸引顾客的营销策略
  • 龙岗网站制作新闻扬州整站seo
  • 17网站一起做网店2018百度识图网页版
  • 怎么做网站架构大型网站建设平台
  • 广州响应网站建设如何使用免费b站推广网站
  • 汽车网站建设工作室seo技术顾问阿亮
  • 网站建设中 什么意思平台连接
  • wordpress在php7.0武汉seo诊断
  • 怎么样注册网站百度 营销推广怎么操作
  • 赛扬e3300做网站百度云电脑版网站入口
  • 潍坊做网站的企业软文代写
  • 巴西有做amazon网站吗郑州学校网站建设
  • 网站制作软件手机版网页设计网站
  • 经营性网站需要icp备案吗今日全国疫情一览表