1、按照面向对象的要求,可以把字符串看作一个对象,设计一个串类加以描述。但是,在一般的情况下不必建立自己的串类,c++标准

在库<string>中给出了类string,提供了丰富的串操作,程序员使用指令: #include<string>即存取这个类。可将类string视为一个容器类,其部分操作如下:

构造函数:

string s:构造一个空串s

string s(a):构造串s,并用字符数组a初始化

string s(a,n):构造串s,用字符数组a的前n个字符初始化

string s(str):用串str构造串s(拷贝初始化)

看下面代码验证

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e5+10;
const int maxk=3e5+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{char a[maxn];cin>>a;//输入abcdefghstring s(a);//结果为abcdefghstring s1(a,5);//结果为abcdestring s2(s1);//结果为abcdecout<<s<<endl;cout<<s1<<endl;cout<<s2<<endl;return 0;
}

输入输出:

getline(cin,s,delim):从cin中提取字符存入串s中,当遇到delim或者提取的字符个数等于s的长度时结束,如果自己不设定,默认为'\n'

getline(cin,s):遇到'\n'结束

cin>>s:遇到空白字符终止提取,空白字符不被读取

cout<<s:输出s

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e5+10;
const int maxk=3e5+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{string s;while(getline(cin,s,'#')){getchar();//自己指定了字符要加getchar,不然结果会多出一个换行,但是默认情况下不用加getcharcout<<s<<endl;}return 0;
}

操作符:

s=val:赋值操作,val可以是一个串 ,一个字符或一个字符数组

s+=val:将val添加到串s之后

s[pos]:下标操作

s+t,t+s:s和t的连接,返回连接的结果。 t可以是一个串,一个字符或者一个字符数组

t<s,s<t,s<=t:由关系操作符确定结果是true还是false

t==s,s==t,s!+t······

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e5+10;
const int maxk=3e5+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{string s1,s2;char a;for(int i=0;i<5;i++){cin>>a;s1+=a;}cout<<s1<<endl;//输入为abcde,结果为abcdecin>>s2;//输入fgcout<<s2<<endl;//输出fgs1+=s2;cout<<s1<<endl;//输出abcdefgif(s1<s2) cout<<"yes"<<endl;else cout<<"no"<<endl;return 0;
}

添加:

s.append(str):将str添加在s之后,返回s

s.append(str,pos,n):将str中从位置pos开始的n个字符添加在s之后,如果n太大,则取str中从位置pos到串结尾的字符,返回s

s.append(a):将字符数组添加在s之后,返回s

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e5+10;
const int maxk=3e5+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{string s1,s2;cin>>s1>>s2;//输入abcde fgcout<<s1<<" "<<s2<<endl;//输出abcde fg
    s1.append(s2);cout<<s1<<endl;//输出abcdefgs2.append(s1,1,3);//输出结果为fgbcdcout<<s2<<endl;return 0;
}

赋值:

s.assign(str):用str给s赋值,返回s

s.assign(str,pos,n):将str中从位置pos开始的n个字符组成的字串赋给s

s.assign(a):将字符数组赋给s

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e5+10;
const int maxk=3e5+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{string s1,s2;cin>>s1;//输入abcde
    s2.assign(s1);cout<<s2<<endl;//输出结果为abcdes2.assign(s1,0,3);cout<<s2<<endl;//输出结果为abcreturn 0;
}

长度:

s.size():返回s的长度,不能用于统计C风格的以'\0'结尾的字符串长度

s.length():返回s的长度,不能用于统计C风格的以'\0'结尾的字符串长度

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e5+10;
const int maxk=3e5+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{string s1,s2;cin>>s1;//输入abcdecout<<s1.length()<<endl;cout<<s1.size()<<endl;return 0;
}

比较:
s.compare(str):根据s小于,等于,大于,返回一个负值,0,正值

s.compare(a):像上面的一样,只是这里是一个字符数组a而已

s.compare(pos,n,str):s中从位置pos开始的n个字符组成的子串与str比较

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e5+10;
const int maxk=3e5+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{string s1,s2;cin>>s1>>s2;cout<<s1.compare(s2)<<endl;cout<<s1.compare(2,1,s2)<<endl;return 0;
}

插入:

s.insert(pos,str):在s的位置pos处插入str

s.insert(pos1,str,pos2,n):将str中从位置pos2开始的n个字符插入s中的位置pos1处

s.insert(pos,a,n):将a 的前n个字符插入s中位置pos处

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e5+10;
const int maxk=3e5+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{string s1,s2;cin>>s1>>s2;//输入abcdes1.insert(0,s2);cout<<s1<<endl;s1.insert(0,s2,1,1);//位置都是从0开始的cout<<s1<<endl;return 0;
}

替换:

s.replace(pos1,n1,str):用str替换s中从位置pos1开始的n1个字符组成的子串,返回s

s.replace(pos1,n1,str,pos2,n2):用str中从位置pos2开始的n2个字符替换s中从位置pos1开始的n1个字符,返回s

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e5+10;
const int maxk=3e5+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{string s1,s2;cin>>s1>>s2;//输入abcde fgs1.replace(1,2,s2);//结果为afgdecout<<s1<<endl;s1.replace(0,3,s2,0,2);cout<<s1<<endl;//结果为fgdereturn 0;
}

取子串:

s.substr(pos,n):返回从pos开始的n个字符组成的子串,如果n太大或者省略,则返回从pos开始直到s结尾的左右字符组成的子串,pos的默认值为0,会在末尾自动加'\0'

c语言的strncpy函数不会在末尾帮你加'\0',切记要自己加

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e5+10;
const int maxk=3e5+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{string s1,s2;cin>>s1;//输入abcdecout<<s1.substr(1,3)<<endl;//结果为bcdreturn 0;
}

是否为空串:

s.empty:为空,返回true,不为空,返回false

查找:

s.find(str,pos):在串s中从位置pos开始查找串str,若查找成功,返回str首次出现的位置,若查找不成功,返回s.npos,pos的默认值为0

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{string s="abc";if(s.find('d')!=s.npos) cout<<"1"<<endl;else cout<<"0"<<endl;return 0;
}
//输出为0

s.find(a,pos):同上

s.rfind(str,pos):在s的前(pos+str.size())个字符中查找str,若查找成功,返回str最后一次出现的位置,若不成功,返回-1,若pos省略,则在s中查找str最后一次出现的位置

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e5+10;
const int maxk=3e5+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{string s1,s2;cin>>s1>>s2;//输入abcde bc
cout<<s1.find(s2,1);return 0;
}

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e5+10;
const int maxk=3e5+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int main()
{string s1,s2;cin>>s1>>s2;//输入abcdefgabcdefg fgcout<<s1.rfind(s2)<<endl;//12cout<<s1.rfind(s2,8)<<endl;//5return 0;
}

reverce()函数:将字符串翻转,s.reverce(s.begin(),s.end())

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;#include <iostream>
#include <string>
#include <algorithm>
using namespace std;int main()
{string s = "hello";reverse(s.begin(),s.end());cout<<s<<endl;return 0;
}

C++的string类提供下列3个成员函数将一个string类的对象s转换成C风格的字符串:

s.c_str():将存储在s中的字符作为字符数组返回,并添加一个空字符('\0')作为结束符

s.data():将存储在s中的字符作为字符数组返回,最后不添加('\0')

s.copy(a,n,pos):用s中从位置pos开始的n个字符替换a的前n个字符(如果n太大,则用从pos开始的n个字符直到s的末尾的所有字符),pos默认为0,返回用于替换的字符个数

转载于:https://www.cnblogs.com/caijiaming/p/9467312.html

string的各种函数(系统学习)相关推荐

  1. 新手C#string类常用函数的学习2018.08.04

    ToLower()用于将字符串变为小写,注意字符串的不可变特性,需要重新赋值给另一个字符串变量. s = s.ToLower();//字符串具有不可变性,转换后需要重新赋值,不可仅有s.ToLower ...

  2. 布谷鸟哈希函数的参数_系统学习hash算法(哈希算法)

    系统学习hash算法(哈希算法) 转载请说明出处. 前言: 关于本文<系统学习hash算法>的由来.在看到了<十一.从头到尾彻底解析Hash 表算法>这篇文章之后,原文中没有暴 ...

  3. 系统学习Python——2D绘图库Matplotlib:绘图函数matplotlib.pyplot.plot(plt.plot)

    分类目录:<系统学习Python>总目录 matplotlib.pyplot是Matplotlib的基于状态的接口.它提供了一种隐式的.类似MATLAB的绘图方式.它还会在您的屏幕上打开图 ...

  4. python自学流程-Python系统学习流程图,教你一步步学习python

    对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Pytho ...

  5. .NET系统学习----Globalization Resources

    前言: 在学习如何使用.NET资源文件以及如何开发World-Ready程序之前,我们先通过一个例子来看看为什么要使用资源文件,以及使用它的好处. 假设要在程序中根据当前的Culutre来设置Form ...

  6. 用python设计一个管理系统思路_Python大佬一个月打造的Python系统学习流程图!

    对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Pytho ...

  7. python逻辑运算的一些流程图_Python大牛历时一个月打造的Python系统学习流程图,超详细!...

    对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Pytho ...

  8. Vue.js实战之系统学习第七节

    想看上一节的请点击: Vue.js实战之系统学习第六节 接下来我们要学习第七节了,时间过的好快. 组件详解 组件是Vue.js的核心功能,也是整个框架设计最精彩的地方,当然也是最难掌握的.本章节将带你 ...

  9. django系统学习笔记

    转自:http://hi.baidu.com/derris/item/7ca6013e330563fede2221ab 2010-02-07 00:12 django系统学习笔记--(1)hello ...

  10. 系统学习——JavaScript

    系统学习目录 第一篇--HTML/HTML5 第二篇--CSS/CSS3 第三篇--JavaScript 第四篇--jQuery 第五篇--Ajax & JSON 第六篇--Bootstrap ...

最新文章

  1. jekyll静态博客提升访问速度:内嵌CSS,异步加载js,压缩HTML
  2. eci转换ci公式_原文提供的置信区间不是95%,如何转换?
  3. python训练营免费领取-21天训练营丨Python量化投资打卡第五期!学完押金全返!...
  4. curl 请求没反应_理解Redis的反应堆模式
  5. python测试代码运行时间_python测量代码运行时间方法
  6. mac连接局域网mysql_MySQL for Mac 安装和基本操作
  7. 搭建linux环境的tomcat服务器
  8. 机器视觉:工业镜头专业词汇中英文详解
  9. 《数据库系统概论》第一章笔记
  10. HttpServlet介绍
  11. MySQL卸载不干净问题
  12. SOIC 和 SOP区别
  13. js获取免费天气api
  14. Flink SQL Print Connector
  15. 2019 年百度之星·程序设计大赛 - 初赛一 1003 Mindis
  16. 验证CUDA和CUDNN是否安装成功的方法
  17. 群晖nas使用的端口
  18. Linux(CentOS 7)、Windows双系统安装图文教程(超详细)适合初学者
  19. android开机动画bootanimation 分析
  20. 理解卷积的空间不变性和通道特异性

热门文章

  1. 【报告分享】90后人群消费趋势研究报告.pdf
  2. “算法天团”最强课程笔记已整理好,速查收!【附PPT打包下载】
  3. 腾讯广告算法大赛 | 复赛第二周最佳进步奖得主心得分享
  4. 有关胶囊网络你所应知道的一切
  5. java lucene cms_JEECMSv6标签使用之[@cms_lucene_list]
  6. mongodb java 执行js脚本_MongoDB编写并执行js脚本
  7. linux把集群中所有机器关闭,Hadoop集群(第5期)_Hadoop安装配置
  8. java 五大原则_面向对象五大原则
  9. Leetcode每日一题:48.rotate-image(旋转图像)
  10. UVA - 10474