string 是基本的字符串序列容器,对应数据结构中的串,和vector<char>也类似,但功能更多

string 容器的使用

  1,string 的构造函数是。  string()

  2,string的添加函数,。    insert(),push_back()

  3,string的遍历。        数组形式遍历,迭代器形式遍历

  4,string的字符串替换    replace()

  5,string 的字符搜索    find()

  6,其他的常见函数     size(),length(),empty()

#include<iostream>
using namespace std;
#include<string>
void test1();//测试string的构造函数
void test2();////测试字符添加函数
void testPrint();//测试string的遍历
void testErase();//测试string的字符删除
void testReplace();//测试string的字符串替换
void testFind();//测试字符搜索函数
void testOthers();//测试其他常见函数
void print1(string &s);//使用数组形式遍历,和vector,数组的遍历非常相似
void print2(string &s);//使用正向迭代器iterator遍历
void print3(string &s);//使用反向迭代器reverse_iterator遍历
int main(void)
{
test1();
test2();
testPrint();
testErase();
testReplace();
testFind();
testOthers();
getchar();
}
void test1()//测试string的构造函数
{
/*
string的构造函数
string();//创建空的string对象
string(const char *p);//使用字符串p,构造一个srring 对象
string(const string &s);//由一个string对象s,构造一个新的string对象。
string(const string &s,size_type=0,size_type n=npos);//将string对象s的[pos,pos+n)拷贝到新建的对象中
*/
cout<<"-------测试string的构造函数--------------------"<<endl;
char *p="I love Shanghai"; string s1;//1.创建空的string对象s;
s1=p;//将字符串p赋值给s1
string s2(p);//将字符串数组p拷贝到新建的对象s2中
string s3(s2);//使用一个对象s2创建一个新的对象s3
string s4(s3,,);//使用string对象s3的[0,6)个字符创建新的string对象s4 cout<<"对象s1:"<<s1<<endl;
cout<<"对象s2:"<<s2<<endl;
cout<<"对象s3:"<<s3<<endl;
cout<<"对象s4:"<<s4<<endl; }
void test2()//测试字符添加函数
{
/*
void push_back(char c) //在string对象的尾部添加字符c
string & append(const char *s)//在string对象的尾部加字符串s
string & append(const string &s)//在string对象的尾部加s对象的字符串
itertor insert(iterator pos,const char &c)//在string对象 pos之前插入字符c
string 还重载运算符+,+=
*/
cout<<"---------测试字符添加函数------------------"<<endl;
string str1;
str1.push_back('a');
str1.push_back('b');
cout<<"str1:"<<str1<<endl;
char *p="cdef";
string str2(p);
cout<<"str2:"<<str2<<endl;
str1.append(str2);
cout<<"append str2后str1:"<<str1<<endl;
str1.insert(str1.begin()+,'');//在str1[3]字符之前加字符8
cout<<"insert后,str1:"<<str1<<endl;
string str3;
str3=str1+str2;
cout<<"s3=s1+s2:"<<str3<<endl; }
void print1(string &s)//使用数组形式遍历,和vector,数组的遍历非常相似
{
cout<<"使用数组形式遍历:";
for(int i=;i<s.size();i++)
{
cout<<s[i];
}
cout<<endl;
}
void print2(string &s)//使用正向迭代器iterator遍历
{
cout<<"使用正向迭代器iterator遍历:";
string::iterator i;
for(i=s.begin();i<s.end();i++)
{
cout<<*i;//迭代器只能用*号,不像指针一样可以用数组形式s[i]
}
cout<<endl;
}
void print3(string &s)//使用反向迭代器reverse_iterator遍历
{
cout<<"使用反向迭代器reverse_iterator反向遍历:";
string::reverse_iterator i;
for(i=s.rbegin();i<s.rend();i++)
{
cout<<*i;
}
cout<<endl;
}
void testPrint()//测试string的遍历
{
cout<<"-------测试string的遍历-----------------"<<endl;
char *p="I Love China!";
string s(p);
cout<<"string对象s:"<<s<<endl;
print1(s);
print2(s);
print3(s);
}
void testErase()//测试字符的删除函数
{
/*
erase函数的原型如下:
(1)string& erase ( size_type pos = 0, size_type n = npos );//从本质上来说,是一个整型数。关键是由于机器的环境,它的长度有可能不同。
(2)iterator erase ( iterator position );
(3)iterator erase ( iterator first, iterator last );
也就是说有三种用法:
(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器),[first,last)
*/
cout<<"-------测试string的字符删除-----------------"<<endl;
char *p="";
string s(p);
cout<<"s:"<<s<<endl; s.erase(,);//删除s[2]开始的4个字符
cout<<"s:"<<s<<endl; s.erase(s.begin());//删除迭代器s.bengin()处的字符
cout<<"s:"<<s<<endl; s.erase(s.begin(),s.begin()+);//删除bengin到begin+1之前的字符【begin,begin+2)
cout<<"s:"<<s<<endl; s.clear();//清楚所有字符
cout<<"s:"<<s<<endl;
}
void testReplace()//测试string的字符串替换
{
/*
string & replace(size_type pos,size_type n,const char*s)//将pos开始的n个字符,替换为字符串s;
string & replace(size_type pos,size_type n,int m,char c )//将pos开始的n个字符,替换为m个字符c
string & replace(iterator first,iterator last,const char *s)//将当前字符串的[first,last)替换为字符串s
*/
cout<<"-----------测试string的字符串替换--------------"<<endl;
char *p="Hello,boy!";
string s(p);
cout<<"s: "<<s<<endl; s.replace(,,"girls");//将s[6]开始的3个字符,替换为字符串girls;
cout<<"s: "<<s<<endl; s.replace(,,,'!');//将s[11]开始的1个字符,替换为2个字符'!'
cout<<"s: "<<s<<endl; s.replace(s.begin(),s.begin()+,"I Love");//将begin到.begin+5之间的字符替换为“I Love”
cout<<"s: "<<s<<endl;
}
void testFind()//测试字符搜索函数
{
/*
size_type find(const char *s,size_type pos=0);//在当前字符串的pos位置开始,查找子串s,找到返回索引,没找到返回-1
size_type find(const char c,size_type pos=0);//在当前字符串的pos位置开始,查找字符c的位置,找到返回索引,没找到返回-1
size_type rfind(const char *s,size_type rpos=0);//在当前字符串的pos位置开始,反向查找子串s,找到返回索引,没找到返回-1
size_type find_first_of(const char *s,size_type rpos=0);//在当前字符串的pos位置开始,查找位于子串的字符,找到返回索引,没找到返回-1
size_type find_not_first_of(const char *s,size_type rpos=0);//在当前字符串的pos位置开始,查找第一个不位于子串的字符,找到返回索引,没找到返回-1
*/
cout<<"------测试字符搜索函数---------------"<<endl;
string s("dog bird chicken bird cat dog");
for(int i=;i<s.size();i++)
{
cout<<"s["<<i<<"]="<<s[i]<<" ";
}
cout<<endl; cout<<"s: "<<s<<endl;
//字符串查找
cout<<s.find("bird")<<endl;
cout<<(int)s.find("pig")<<endl;//返回的类型是size_type. size_type从本质上来说,是一个整型数。关键是由于机器的环境,它的长度有可能不同。
//字符查找
cout<<s.find('i',)<<endl;//从s[7]开始找字符i,找到返回pos
//c从字符串末尾开始查找字符串和字符
cout<<s.rfind("bird")<<endl;
cout<<s.rfind('i')<<endl;
cout<<s.find_first_of("12dog34")<<endl;//s中的字符d第一个出现在“12dog34”返回0
cout<<s.find_first_not_of("d34")<<endl;//s中的字符o是第一个没有出现在字符“d34”,返回1
cout<<s.find_last_of("12dog34")<<endl;//s中的字符d,最后出现在“12dog34”的下标是28 ,返回28
cout<<s.find_last_not_of("d34")<<endl;//s中最后一个不位于“d34”的字符g,下标是28
}
void testOthers()//其他常见函数
{
cout<<"-----------测试其他常见函数---------------"<<endl;
string s1;
string s2;
cout<<s1.empty()<<endl;//空返回1
cout<<s1.compare(s2)<<endl;//两个字符串对象都为空,相等返回0
s1+="";
cout<<s1.compare(s2)<<endl;//两个字符串对象不相等,返回1
cout<<s1.compare("")<<endl;//对象s1的字符串和“123456789”相等,返回0
cout<<s1.empty()<<endl;//不为空返回0 cout<<"s1.size="<<s1.size()<<endl;//s1的有9个字符,返回9
cout<<"s1.length="<<s1.length()<<endl;//s1.length()放回9
cout<<"s1.capacity="<<s1.capacity()<<endl; const char *cArray=s1.c_str();//转化为常量 字符数组
cout<<cArray[]<<endl;
}
void testSubstr()
{
string a = "0123456789abcdefghij";
cout<<a<<endl;
string sub1 = a.substr();//从a[10]开始,全部
cout << sub1 << '\n'; string sub2 = a.substr(, );//从a[5]开始,长度为3
cout << sub2 << '\n';
string sub3 = a.substr(, );//从a[12]开始,长度为100
cout << sub3 << '\n';
}

 

stl string 容器的使用的更多相关文章

  1. 浅谈C++ STL string容器

    浅谈C++ STL string容器 本篇随笔简单讲解一下\(C++STL\)中\(string\)容器的使用方法及技巧. string容器的概念 其实\(string\)并不是\(STL\)的一种容 ...

  2. 2.2 C++STL string容器详解

    文章目录 引言 2.2.1 string的特性 2.2.2 string用法理论 2.2.2.1 string构造函数 2.2.2.2 string赋值操作 2.2.2.3 string取值操作 2. ...

  3. C++进阶 STL(1) 第一天 [容器,算法,迭代器] string容器 vector容器 deque容器

    课程大纲 02实现基本原理 容器,算法,迭代器 教室:容器 人:元素 教室对于楼:容器 序列式容器: 容器元素在容器中的位置是由进入容器的时间和地点来决定 序列式容器 关联式容器: 教室中 按年龄排座 ...

  4. C++ STL vector容器学习

    STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...

  5. STL List容器

    转载http://www.cnblogs.com/fangyukuan/archive/2010/09/21/1832364.html 各个容器有很多的相似性.先学好一个,其它的就好办了.先从基础开始 ...

  6. C++ STL string对象操作汇总

    string对象 C语言只提供了一个char类型用来处理字符,而对于字符串,只能通过字符串数组来处理,显得十分不便.C++STL提供了string基本字符系列容器来处理字符串,可以把string理解为 ...

  7. c++复习:STL之容器

    1 STL的string 1 String概念 string是STL的字符串类型,通常用来表示字符串.而在使用string之前,字符串通常是用char*表示的.string与char*都可以用来表示字 ...

  8. STL Queue 容器

    STL Queue 容器 Queue简介         queue是队列容器,是一种“先进先出”的容器.         queue是简单地装饰deque容器而成为另外的一种容器.        # ...

  9. STL stack 容器

    STL stack 容器 Stack简介 stack是堆栈容器,是一种“先进后出”的容器.      stack是简单地装饰deque容器而成为另外的一种容器.      #include <s ...

随机推荐

  1. Oracle中 in、exists、not in,not exists的比较

    最基本的区别: in 对主表使用索引 exists 对子表使用索引 not in 不使用索引 not exists 对主子表都使用索引 写法: exist的where条件是: "...... ...

  2. ABP官方文档翻译 6.7 CSRF/XSRF保护

    CSRF/XSRF保护 介绍 HTTP动词 非浏览器客户端 ASP.NET MVC 特征 集成 布局视图 配置 ASP.NET Web API 特征 集成 集成到ASP.NET MVC客户端 集成到其 ...

  3. ABP官方文档翻译 5.1 Web API控制器

    ASP.NET Web API控制器 介绍 AbpApiController基类 本地化 其他 过滤器 审计日志 授权 反伪造过滤器 工作单元 结果包装和异常处理 结果缓存 校验 模型绑定器 介绍 A ...

  4. 使用angular/react/vue实现相同的面试题组件

    面试题要求如下所示 1.angular: <!DOCTYPE html><html lang="en"><head> <meta char ...

  5. Windows下为Lua脚本进行加密处理

    缘由 想对Lua脚本进行安全性处理,可惜一直没有想到很好的解决方案,考虑过用原生Lua将脚本编译成二进制代码,也考虑过用zlib将文件进行加密压缩处理,但是感觉都不是最佳方案,今天忽然想到有个东西叫L ...

  6. C语言头文件中定义全局变量导致重复定义错误

    合作方升级SDK后,程序编译出现变量重复定义的错误,通过错误提示无法找到什么位置重复定义了,但确定是引入新SDK后才出现的错误,从SDK的头文件中查找,最终发现在头文件中定义了全局变量 我们的项目在多 ...

  7. CSS3 @keyframes 用法(简单动画实现)

    定义: 通过 @keyframes 规则,能够创建动画. 创建动画的原理是,将一套 CSS 样式逐渐变化为另一套样式. 在动画过程中,可以多次改变这套 CSS 样式. 以百分比来规定改变发生的时间,或 ...

  8. 使用域账号统一管理cisco网络设备

    1.思科设备和微软系统整合的背景: 公司内部有一定数量的客户端,为了实现统一化,在管理内部部署了域架构,这样可以通过组策略对客户端进行批量化管理,提高了管理的效率. 同样公司内部有一定数量的网络设备( ...

  9. js的继承实现

    1.原型链继承 1.创建父类对象2.创建子类函数对象3.将父类的实例对象赋值给子类的原型4.将子类的原型属性的构造函数设置为 子类本身 function Person(name) { this.nam ...

  10. java12 - 正则表达式

    正则表达式简介 常用搭配说明: ^a 表示这个位置只能是字母 a [1,2,3,4] 表示这个位置只能在 1,2,3,4 中取一个 [[a-z][A-Z]] 表示可以任意大小写字母 ([a-z]{1, ...