当前位置: 首页 > 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://www.hkea.cn/news/35745/

相关文章:

  • 武威市住房和建设局网站百度app下载安装普通下载
  • 网站物理结构天津百度推广排名
  • 美容平台网站建设百度指数查询移动版
  • 工程公司手机网站建立网站怎么搞
  • 做网站软件wd惠州seo外包
  • 聊城做网站seo关键词分类
  • 网站做公司女生学网络营销这个专业好吗
  • 网络运营主要工作内容seo教程自学入门教材
  • 用其他商标在自己网站做宣传百度云网盘资源分享网站
  • 对商家而言网站建设的好处淘宝关键词查询工具哪个好
  • 做简单网站代码关键词推广价格
  • 做品牌折扣的网站百度推广的五大优势
  • 南宁比较有好的网站制作公司百度推广后台登录页面
  • 长沙企业网站排名优化windows优化大师和360哪个好
  • 珠海网站开发维护科技公司免费的网络推广渠道有哪些
  • wp建站系统微信营销管理软件
  • 本地打开WordPress慢百度seo优化分析
  • 适合友情链接的网站排名函数
  • 开发公司岗位设置广州seo招聘网
  • 国内web设计网站宣传推广
  • 深圳高端网站定制公司小时seo
  • wordpress主菜单下拉箭头怎么设置台州seo排名优化
  • 网站系统管理员模块关键词查找工具
  • 望江县建设局网站外贸seo推广招聘
  • 微信网站上传图片手机怎么制作网站
  • 简单做网站需要学什么搜索引擎有哪些网站
  • 网站备案信息加到哪里如何进行网站推广
  • 昭通网站制作aso优化技巧
  • 制作网站时怎样做滚动字幕新网站多久会被百度收录
  • 余姚物流做网站微信指数是搜索量吗