函数的知识点(总结)

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函数的原型如下:

(1string& erase ( size_t pos = 0, size_t n = npos );

(2)iterator erase ( iterator position );

(3)iterator erase ( iterator first, iterator last );

也就是说有三种用法:

(1erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符

(2erase(position);删除position处的一个字符(position是个string类型的迭代器)

(3erase(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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章