题解 | #简单错误记录#
简单错误记录
https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb
#include <iostream> using namespace std; #include <string> #include <sstream> #include <map> int main() { string str; string err; string num; multimap<string, int> errCountMap; string errRecord[8]; string numRecord[8]; int i = 0; while (getline(cin, str)) { istringstream is1(str); while (getline(is1, err, '\\')) ; istringstream errIs(err); getline(errIs, err, ' '); getline(errIs, num); if (err.length() > 16) { err.erase(0, err.length() - 16); } if (errCountMap.count(err + num) == 0) { errRecord[i % 8] = err; numRecord[i % 8] = num; errCountMap.insert(pair<string, int>(err + num, 0)); } else { errCountMap.insert(pair<string, int>(err + num, 0)); i--; } i++; } if (i > 7) { for (int j = i % 8; j <= 7; j++) { cout << errRecord[j] << " " << numRecord[j] << " " << errCountMap.count(errRecord[j] + numRecord[j]) << endl; } for (int j = 0; j < i % 8; j++) { cout << errRecord[j] << " " << numRecord[j] << " " << errCountMap.count(errRecord[j] + numRecord[j]) << endl; } } else { for (int j = 0; j < i; j++) { cout << errRecord[j] << " " << numRecord[j] << " " << errCountMap.count(errRecord[j] + numRecord[j]) << endl; } } }
感觉像是脱裤子放屁的一道题。
要注意的是,即使你存了1个新错误,其他错误的出现时间依然是有效的,所以这个所谓的只存8个就是个笑话,实际上内存还得保留之前错误的出现信息。
用好sstream提供的c++风格流,做好输入读取,注意‘\’这个特殊符号的输入要用'\\'转义输入。
再使用multimap进行计数,这个支持重复的map计数真好用,可以减少很多代码。
注意一下输出,它也是按错误时间输出的,需要在输出处进行一点修改,也可以换一种数据结构先,总之要满足先进先出,这里我大意了。
华为机试刷题记录 文章被收录于专栏
记录一下手打代码的解题思路方便复习