计算机上级复试资料

3. 入门并实践STL——string篇

2019-03-01  本文已影响0人  zju_dream

string

  1. how to use?
#include<string>
using namespace std;
  1. string的定义

    • string str;
    • 初始化,string str = "abc";
  2. string的输入与输出

  3. string中内容的访问

    1. 通过下标:str[1]
    2. 通过迭代器访问
      • 一般使用第一种即可满足访问要求,但是有些函数比如insert()erase()要求以迭代器为参数
      • string::iterator it = str.begin();
    3. string和vector一样,支持直接对迭代器进行加减某个数字,如str.begin() + 3的写法是可行的。
  4. 常用函数解析

    1. operator+=: 将两个string直接拼接起来

    2. compare operator: 用于比较大小,比较规则是字典序

      1. ==
      2. !=
      3. <
      4. <=
      5. >
      6. >=
    3. size()length(): 存放的字符数,O(1)

    4. insert(), O(n)

      1. insert(pos, string): 在pos位置插入字符串string。例:str.insert(1, "xy"); // 在str[1]处插入,str变成axybc
      2. insert(it, it2, it3);: it为原字符串插入的位置,it2和it3为需插入字符串的首尾地址。
    5. erase()

      1. 删除单个元素: str.erase(it);
      2. 删除一个区间内的所有元素: str.erase(first, last), 删除[first, end)
      3. 时间复杂度都为O(n)
    6. clear(), O(1)

    7. substr(): subtr(pos, len); 返回从pos号开始,长度为len的字串,O(len)

    8. string::npos: 值为-1,用以作为find函数失配时的返回值。

    9. find():

      1. str.find(str1);,当str1时str的字串时,返回str中第一次出现的位置,如果str2不是str的字串则返回string::npos
      2. str.find(str1, pos); 从pos号位开始匹配str2
      3. 时间复杂度:O(nm), n和m为两个字符串的长度。
    10. replace()

      1. str.replace(pos, len, str2);
      2. str.replace(it1, it2, str2);: 把[it1, it2)范围的字串替换成str2
      3. 时间复杂度:O(str.length())

习题

Are they euqal

#include<iostream>
#include<string>
using namespace std;
int N;
string deal(string str, int& e) {
    while(str.length() > 0 && str[0] == '0') {
        str.erase(str.begin());
    }
    // str is less than 1
    if(str[0] == '.') {
        str.erase(str.begin());
        while(str.length() > 0 && str[0] == '0') {
            str.erase(str.begin());
            e--;
        }
    }
    //str is larger than 1
    else {
        // to find '.'
        int k = 0;
        while(k < str.length() && str[k] != '.') {
            k++;
            e++;
        }
        // it means we find '.', then we delete it.
        if(k != str.length()) {
            str.erase(str.begin() + k);
        }   
    }
    int len = str.length();
    if(len == 0) e = 0;
    while(len++ < N) {
        str += "0";
    }
    str = str.substr(0, N);
    return str;
    
}

int main() {
    
    scanf("%d", &N);
    // the input is too large, so we can't use integer to store them.
    // 
    string a, b;
    cin >> a >> b;
    int e1 = 0;
    int e2 = 0;
    a = deal(a, e1);
    b = deal(b, e2);
    if(a == b && e1 == e2) {
        printf("YES 0.%s*10^%d\n", a.c_str(), e1);
    }
    else {
        printf("NO 0.%s*10^%d 0.%s*10^%d\n", a.c_str(), e1, b.c_str(), e2); 
    }
    system("pause");
    return 0;
}

上一篇下一篇

猜你喜欢

热点阅读