题解 | #简单错误记录#

简单错误记录

https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb

#include <iostream>
#include <vector>
using namespace std;

//返回末端地址,且限制大小为16个字符
string addrcut(string addr) {
    int point;
    for (int i = 0; i < addr.length(); i++) {
        if (addr[i] == '\\') {
            point = i + 1;
        }
    }
    string record;
    for (int i = 0; i + point < addr.length(); i++) {
        if (addr.length() - i - point > 16)
            continue;
        record = record + addr[i + point];
    }

    return record;
}

//字符串比较
bool cmp_str(string a, string b) {
    if (a.length() != b.length())
        return false;
    for (int j = 0; j < a.length(); j++) {
        if (a[j] != b[j]) {
            return false;
        }
    }
    return true;
}

//比较地址以及对应行数,若存在匹配,返回对应序列号,否则返回末端序列号(首次出现"\0")
int cmp_addr(string addr, string* record, int l, int* line) {
    int i = 0;
    for ( ; i < 100; i++) {
        bool flg = cmp_str(addr, record[i]);
        if (l != line[i])
            flg = false;
        if (flg == true) {
            return i;
        }
        if (record[i] == "\0")
            break;
    }
    return i;
}

int main() {
    vector<string> record(100, "\0");
    vector<int> line(100, 0);
    vector<int> num(100, 0);
    string addr = "\0";
    int l = 0;
    int n = 0;
    while (cin >> addr >> l) {
        string addr_cut = addrcut(addr);
        int m = cmp_addr(addr_cut, &record[0], l, &line[0]);
        record[m] = "\0" + addr_cut;
        line[m] = l;
        num[m]++;
        if (m > n)  //确保遍历过程最大序列号为n
            n = m;
    }
    for (int i = 0; i <= n; i++) {
        if (i + 8 > n) {        //限制输出最后8个
            cout << record[i] << ' ' << line[i] << ' ' << num[i] << endl;
        }
    }
}
// 64 位输出请用 printf("%lld")

自定义功能函数也能整出来,就是多花点时间

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务