题解 | #简单错误记录#
简单错误记录
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")
自定义功能函数也能整出来,就是多花点时间