1.unique();//这是一个去重函数,去掉相同的元素
sort(a,a+n,cmp);//必须先排序
n=unique(a,a+n)-a;//n为数组a的个数
2.reverse();//前后翻转。
reverse(a,a+n);//a为数组(或字符),n为长度
3.strcpy()与strncpy()的用法
博客链接:传送门
#include<stdio.h>
#include<string.h>
int main()
{
char a[100]="hsdfkjfhs";
char b[100]="1232weioruiweruioo";
printf("%s\n",strncpy(a,b+2,sizeof(a)));//会把b中包括2号之后的赋给a,输出32weioruiweruioo
return 0;
}
4.strstr(a,b);
它的作用找出b字符串在a字符串中第一次出现的位置(不包括b的串结束符)。返回该位置的指针,如找不到,返回空指针。
在做到这道题时用到了,题目链接:传送门
strstr(a,b)
返回b在a中第一次出现的位置,返回指向这个位置的指针;
否则返回NULL(即假);
5.set之insert的用法。
insert可以把相同的统计为一个,不会重复计数
#include<set>//3个头文件
#include<iostream>
using namespace std;
set<string>ss;//定义set,你里面可以是任何类型,int ,double
ss.insert(str);//将要统计的字符串放入ss中。
给个完整的代码试试
#include<stdio.h>
#include<set>
#include<iostream>
using namespace std;
char str[1000];
int main()
{
int n;
while(~scanf("%d",&n))
{
set<string>ss;
for(int i=0; i<n; i++)
{
scanf("%s",str);
ss.insert(str);
}
printf("%d\n",ss.size());//输出有多少种不同的字符串;
}
return 0;
}
6.lower_bound(),upper_bound(),的用法。
如果存在,下限找的是它本身的第一个,上限找的是它最后一个的下一个。
如果不存在,下限和上限一样,找的是第一个大于这个数的数。
lower_bound()用法
例子:给你n个数,下标从0开始,输入要找的数,输出它的位置和该位置的那个数。
有各种情况,看下图。
upper_bound()用法
例子:给你n个数,下标从0开始,输入要找的数,输出它的位置和该位置的那个数。
有各种情况,看下图。
可以对比一下。
7.
stringstream ss;字符串流
清空的时候,两个都写,因为有的时候,其中有时一个不管用(可能是我不会)。
ss.str("");
ss.clear();
ss.unget();将其中一个输出的字符返回。
例题:D 前缀式计算
代码:
#include<stdio.h>
#include<string>
#include<sstream>
#include<iostream>
#include<algorithm>
using namespace std;
stringstream ss;
double a;
char ch;
double solve()
{
ss>>ch;
switch(ch)
{
case '+':
return solve()+solve();
case '-':
return solve()-solve();
case '*':
return solve()*solve();
case '/':
return solve()/solve();
default:
ss.unget();
ss>>a;
return a;
}
}
int main()
{
string str;
while(getline(cin,str))
{
ss.clear();
ss<<str;
printf("%.2lf\n",solve());
}
return 0;
}
8.String:erase().
用于删除String中的字母。
erase函数的原型如下:
(1)string& erase ( size_t pos = 0, size_t 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都是迭代器)
#include <string>
using namespace std;
int main ()
{
string str ("This is an example phrase.");
string::iterator it;
// 第(1)种用法
str.erase (10,8);
cout << str << endl; // "This is an phrase."
// 第(2)种用法
it=str.begin()+9;
str.erase (it);
cout << str << endl; // "This is a phrase."
// 第(3)种用法
str.erase (str.begin()+5, str.end()-7);
cout << str << endl; // "This phrase."
return 0;
}