机试题

Posted by cyq on January 30, 2020

计算机考研复试 233 道

华为机试 108 道

程序员面试金典 83 道

剑指offer 67 道(做了24道)


以上共491道

字符串

  1. 输入

    getline(cin, str) // getline的第三个参数为分界符,可自定义,如‘#’,默认的为Enter。

    ​ // getline 取得的字符串不包括换行符。

  2. 查找

    string str = "abcdecfg";
       
    string flag1 = "cd"; 
    //以下6个函数,均可以加第二个参数,表示从指定下标开始查找
    //find 和 rfind 是精确匹配,剩下四个函数只要能匹配上flag中任意一个字符既满足条件。
    cout<<str.find(flag1, 0)<<endl;    // 2,,,表示从下标为0的位置开始从前往后查找 
    cout<<str.rfind(flag1)<<endl;   // 2,,,,,反向查找
    cout<<str.rfind(flag1, 2)<<endl;   // 2,,,表示从下标为2+len(flag1)-1的位置开始从后往前查找
    cout<<str.find_first_of(flag1)<<endl;    // 2
    cout<<str.find_first_not_of(flag1)<<endl;    // 0
    cout<<str.find_last_of(flag1)<<endl;    // 5
    cout<<str.find_last_not_of(flag1)<<endl;    // 7
    cout<<endl;
       
    string flag2 = "c";
    cout<<str.find(flag2)<<endl;    // 2
    cout<<str.rfind(flag2)<<endl;   // 5
    cout<<str.find_first_of(flag2)<<endl;    // 2
    cout<<str.find_first_not_of(flag2)<<endl;    // 0
    cout<<str.find_last_of(flag2)<<endl;    // 5
    cout<<str.find_last_not_of(flag2)<<endl;    // 7
    cout<<endl;
        
    string flag3 = "h";   //找不到的话返回值是 `-1` 或 `string::npos`
    cout<<(str.find(flag3)==-1)<<endl;    // 1
    cout<<(str.rfind(flag3)==string::npos)<<endl;   // 1
    
  3. string与int互转

    string str ="xxxxxx";
    int a = stoi(str);   //对应的函数还有 stol()、stod()
    
    int a = 123456;  // 
    cout<<to_string(a)<<endl;
    
  4. 子串截取

    str.substr(开始位置,截取长度)

容器

1. 共同函数

  • 长度:a.size()

  • 定义:vector a() //不初始化,不申请空间

    ​ vector a(2) //申请两个int空间,初始化为0

2. vector

  • push_back()

  • 排序:
    sort(num.begin(), num.end());   //从小到大排序
    sort(vec.rbegin(), vec.rend());  //从大到小排序
    
    bool cmp(int a,int b){
      return a > b;
    }
    sort(num.begin(), num.end(), cmp); // 自定义cmp函数实现从大到小排序
    
  • 去重:num.erase(unique(num.begin(), num.end()), num.end());

3. map