考查code边界条件
#include <iostream> #include <string> #include <vector> #include <map> #include <algorithm> using namespace std; struct file { string str; //保存字符串 int rows; //错误所在行 int quantity; //数量 }; vector<file> fp; //将所有字符串收集到容器fp void getstr(void) { string str; int row; file tmp; while(cin >> str >> row) { tmp.str = str; tmp.rows = row; tmp.quantity = 1; fp.push_back(tmp); tmp.str.clear(); } } //改变容器fp字符串。 //1、超过16个字符的文件名称,只记录文件的最后有效16个字符 //2、只记录最后一个‘\’前面的字符 void changestr(vector<file>& fp) { int size = fp.size(); for(int i=0; i<size; i++) { int strsize = fp[i].str.size(); for(int j=strsize-1; j>=0; j--){ if(fp[i].str[j] == '\\' || strsize-1-j >= 16) { fp[i].str = fp[i].str.substr(j+1,strsize-1-j); break; } } } } //合并相同字符。 //条件:净文件名相同&&行号相同 //数量加1,去除相同项 void merge(vector<file>& fp) { for(int i=0; i<(int)fp.size(); i++) { for(int j=i+1; j<(int)fp.size(); ){ if(fp[i].str == fp[j].str && fp[i].rows == fp[j].rows){ fp[i].quantity++; fp.erase(fp.begin()+j); }else j++; } } } //测试用例 //E:\V1R2\product\fpgadrive.c 1325 //E:\V1R2\product\fpgadrive.c 1326 //E:\V1R2\product\fpgadrive.c 1327 int main() { getstr(); changestr(fp); merge(fp); int size = fp.size(); if(size > 8){ for(int i=size-8; i<=size-1; i++) { cout << fp[i].str << ' ' << fp[i].rows << ' ' << fp[i].quantity << endl; } }else { for(int i=0; i<size; i++) { cout << fp[i].str << ' ' << fp[i].rows << ' ' << fp[i].quantity << endl; } } return 0; }