C++ 部分函数
string库
1、size()与length()
字符串长,结果相同
string s;
s.length(); //s.length()-1是最后一个字符的下标,而不是'\0'
for(i=0;i<s.length()-1;i++)
cout<<s[i]<<endl; //可以输出每个字符
s.size();
2、find(char ch)
用于string类型
在字符串中找字符ch,没找到返回-1,找到则返回下标;也可以查找一个子串,返回子串(首字符)的下标
string s;
if(s.find('a')==-1)
return false;
没在s中找到字符'a'的话,返回false。
从指定位置处查找
string s;
cin>>s;
if(s.find('a',5)!=-1)//从下标为5处(包含s[5])开始查找
return true;
如果s中有多个相同字符,而要分别输出它们的位置
string s;
cin>>s;
int pos=0;//记录位置 while((pos=s.find('a',pos))!=-1)
cout<<"position"<<pos++<<";";//每次要从上一个位置之后开始查找,不然就会一直输出之前的位置,所以pos++表明从之后开始查找

参考:https://www.cnblogs.com/wkfvawl/p/9429128.html
3、统计字符串长度
strlen(ch):不包含末尾的0;
另外也可用递归的方式不用strlen统计字符串长度
//用递归求字符串长度,字符串都以'\0'结尾
int strlen1(char * ch){
if(*ch!='\0')return strlen1(ch+1)+1;
else return 0
4、提取子串
string s="abcdef"
cout<<s.substr(pos,len)
从指定位置(下标)pos开始,长度为len的子串;
如果没有len或者len长度超过了字符串长,会一直延续到结尾;
如果pos和len都没有,则默认复制整串
PS:第二个参数是子串长度,而不是结束位置!
5、字符串比大小
strcmp(str1,str2)
str1与str2必须是char *或者char []而不能是string类型
根据每个字符的ASC码依次比较str1与str2中的每个字符,直到第一个不相同的字符或者其中一个字符串到尾'\0'
<0 str1小于str2
=0 相等
>0 str1大于str2
string类型的字符串比大小,用string的成员函数compare()
string s1,s2;
s1.compare(s2);
<0 s1<s2
=0 s1=s2
>0 s1>s2
6、字符串复制
strcpy(a,b) 将b复制到a中
algorithm库
7、sort排序,可以按照先后条件进行排序
sort(start,end,cmp)
start为开始的地址,如果不是指针类型的要用引用符号'&'得到地址
end为最后一个地址,即如果是A[8]数组,end应该是A[8]而不是A[7],所以此处的end是终结地址
cmp为排序方式,默认升序
经常自己定义第三个参数即cmp函数,以达到需要的目的,cmp函数返回一个布尔值,其中必须包含逻辑表达式(即比大小的方式)
举个例子:
class Student {
public:
char name[100];
int age;
float grade;
};
bool cmp(Student S1, Student S2) {
//小于号 表示用从小到大的方式排序
if (S1.grade != S2.grade) return S1.grade<S2.grade;
else if (strcmp(S1.name, S2.name) != 0) return strcmp(S1.name, S2.name)<0;
else return S1.age<S2.age;
}
int main() {
int i = 0;
//输入N个Student对象的值
int N;
cin >> N;
Student *S = new Student[N];
for (i = 0; i<N; i++)
cin >> S[i].name >> S[i].age >> S[i].grade;
sort(&S[0], &S[N], cmp);
for (i = 0; i<N; i++)
cout << S[i].name << ' ' << S[i].age << ' ' << S[i].grade << endl;
delete[] S;
}
上述函数就是分别按照grade,name,age的大小关系进行排序,当grade相同时,按name的ascii码大小排序,name也想通就按照年龄从小到大排序
参考:https://www.cnblogs.com/epep/p/10959627.html
8、erase函数,用于一个string或者迭代器类型(iterator)的对象
用法:3种
erase(int pos,n):抹去pos位置(int类型)处n个元素
erase(iterator pos):抹去pos位置(迭代器类型)处一个元素
erase(iterator start,iterator end):抹去从start到end处的元素,这里的start与end都以迭代器的形式表现
由于string类型也是一种容器,可以构建迭代器,所以这里统一用string来举例
#include<string>
#include<iostream>
#include<Windows.h>
using namespace std;
int main() {
string S("This is an example"); string::iterator it; S.erase(9, 1);
cout << S << endl; //输出 This is a example it = S.begin(); S.erase(it + 10);
cout << S << endl; //输出 This is a xample S.erase(it, it + 4);
cout << S << endl; //is a xample system("pause"); return 0;
}
erase与find函数配合,可以达到删除一个字符串中特定字符的目的:https://www.cnblogs.com/LesBlog/p/12569652.html
参考:https://blog.csdn.net/weixin_41969587/article/details/82587372
9、字符串颠倒
三种方法:
1、
cin>>s;
int i=0;
string res("");
for(i=s.length()-1;i>=0;i--)
res+=s[i];
cout<<res<<endl;
2、strrev()函数
string库,用于char[]数组
int main(){
char c[]="abcde";
strrev(c);
cout<<c<<endl;
return 0;
}
//结果 edcba
3、algorithm库的reverse()函数,用于string类型
reverse()函数不只可以用于字符串颠倒,还可以用于vector容器类型的颠倒
int main(){
string S("abcdef");
reverse(S.begin(),S.end());
cout<<S<<endl;
//结果 fedcba
}
参考:https://www.cnblogs.com/bk76120/p/10556037.html
C++ 部分函数的更多相关文章
- javascript中的部分函数应用
这篇文章写的很全面,不过也啰嗦:http://benalman.com/news/2012/09/partial-application-in-javascript/ 这篇文章是神级运用:http:/ ...
- OS.path部分函数的介绍
OS.path模块中的部分函数的介绍 os.path.abspath(path) #返回绝对路径 os.path.basename(path) #返回文件名 os.path.commonprefix( ...
- JavaScript进阶(五)js中取小数整数部分函数
js中取小数整数部分函数 丢弃小数部分,保留整数部分 js:parseInt(7/2) 向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 四舍五入 js: Math.round(7 ...
- js中取小数整数部分函数;取小数部分
1.丢弃小数部分,保留整数部分 parseInt(23.56); 结果:23 2.向上取整,有小数就整数部分加1 Math.ceil(23.56) 结果:24 3,四舍五入. Math.round(2 ...
- Scala偏函数与部分函数
函数 1.部分函数 部分应用函数(Partial Applied Function)是缺少部分参数的函数,是一个逻辑上概念. def sum(x: Int, y: Int, z: Int) = x + ...
- Hive部分函数解析
Hive部分函数解析 Hive里的exists ,in ,not exists ,not in 相关函数 表数据准备: 1.选择指定数据库 eg: use bg_database1; 2. 创建表 ...
- IDEA下Maven项目搭建踩坑记----3.最长的bug,最简单的错误。同一类中,部分函数的@AutoWired注入的对象失效
这个错误绝对是我写到现在为止最傻X的一个错误,先上图 问题: 出了一个特别长的错误,大致的意思就是mapper.xml文件注入Dao层的时候失败. 解决: 查看一下错误的位置→ 找到Dao层 找到错误 ...
- Macos系统编译percona及部分函数在Macos系统上运算差异
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 本文来源:原创投稿 GreatSQL社区原创内容未经授权不得随意使用,转载请联系 ...
- Oracle 部分函数使用说明
oracle有些函数可能我知道是什么作用,但是具体其实说不清楚,这里是我这几天看到的函数使用方法及说明,记录一下,以后看看 --1.replace('str',oldVal,newVal)替换功能方法 ...
- MySQL 部分函数使用
1.DATE_ADD 参考博客:MySQL日期时间函数大全 转 例:DATE_ADD(date,INTERVAL expr type) 2.日期转字符串 DATE_FORMAT 参考博客:MYSQL中 ...
随机推荐
- 如何在pyqt中通过OpenCV实现对窗口的透视变换
窗口的透视变换效果 当我们点击UWP应用中的小部件时,会发现小部件会朝着鼠标点击位置凹陷下去,而且不同的点击位置对应着不同的凹陷情况,看起来就好像小部件在屏幕上不只有x轴和y轴,甚至还有一个z轴.要做 ...
- vue组件中使用watch响应数据
在vue中,使用watch来响应数据的变化.watch的用法大致有三种.下面代码是watch的一种简单的用法: 普通用法: <template> //视图 <input v-mode ...
- Redis——(主从复制、哨兵模式、集群)的部署及搭建
Redis--(主从复制.哨兵模式.集群)的部署及搭建 重点: 主从复制:主从复制是高可用redis的基础,主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复. 哨兵和集群都是 ...
- rpm与yum安装及管理程序
安装及管理程序 1.Linux应用程序基础 2.RPM软件包管理工具 3.yum源仓库创建 1.应用程序与系统命令的关系如图: 典型应用程序的目录结构如图: 常见的软件包封装类型如图: 2.RPM包 ...
- Redis 源码简洁剖析 10 - aeEventLoop 及事件
aeEventLoop IO 事件处理 IO 事件创建 读事件处理 写事件处理 时间事件处理 时间事件定义 时间事件创建 时间事件回调函数 时间事件的触发处理 参考链接 Redis 源码简洁剖析系列 ...
- 手动加载nacos自定义配置到全局变量中
由于springboot启动顺序:先加载上下文再加载bean 开始日常搬砖: 1.通过启动日志发现nacos在PropertySourceBootstrapConfiguration中加载上下文配置: ...
- Cadence物理库 LEF 文件语法学习【持续更新】
我是 雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索. 关注公众号,拉你进"IC设计交流群". @ 目录 一.LEF简介 1.1 通用规则 1.2 管理 LEF 文件 二. ...
- 【CF888G】Xor-MST(生成树 Trie)
题目链接 大意 给出\(N\)个点的点权,定义两个点之间的边权为这两个点权的异或和,求这\(N\)个点间的最小生成树. 思路 贪心地想,相连的两个点异或和应当尽量的小. 那么应先从高位确定,因为高位的 ...
- 初见Redis
Redis是什么,有什么特点和优势 Redis是一个开源用C语言编写的,基于内存,可以持久化,高性能的key-value数据库,并提供多种语言的API. 它也被称为数据结构服务器,因为值(value) ...
- Solution -「Gym 102759C」Economic One-way Roads
\(\mathcal{Description}\) Link. 给定一个含 \(n\) 个点 \(m\) 条边的简单无向图,每条边的两种定向方法各有权值,求使得图强连通且定向权值和最小的方法. ...