题解 | #简单错误记录#
简单错误记录
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")
自定义功能函数也能整出来,就是多花点时间
查看3道真题和解析
字节跳动公司福利 1371人发布