题解 | #简单错误记录#
简单错误记录
http://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb
c++
思路描述
- 首先对数据进行除了,对输入的字符串进行分割,对于分割的第一个字符找到最后一个斜杆的位置,再进行分割,第二个字符转换成整数。用两个数组进行存储
- 识别相同的错误,相同的错误是文件名相同和行号相同,则定义一个pair<string,int>PII进行标识 再通过map对相同错误的个数进行存储
- 再开辟两个数组,将不同的错误按照出现先后存储起来,最后取出倒八个错误
具体代码实现如下
using namespace std;
typedef pair<string,int>PII;
int main(){
string s;
vector<int>v,v1;
vector<string>vs,vs1;
map<PII,int>m;
while(getline(cin,s)){
istringstream iss(s);
int cnt=0;
string seg;
while(getline(iss,seg,' ')){
if(cnt==0){//第一个字符串截取斜杆后的字符
int lastindex=seg.find_last_of('\\');
string ss=seg.substr(lastindex+1,seg.size()-1-lastindex);
cnt++;
if(ss.size()<=16)vs.push_back(ss);
else vs.push_back(ss.substr(ss.size()-16,16));
}else{//第二个字符串转换成整数
v.push_back(stoi(seg));
}
}
}
for(int i=0;i<v.size();i++){
//如果没有存过
PII p={vs[i],v[i]};
if(m[p]==0){
vs1.push_back(vs[i]);
v1.push_back(v[i]);
m[p]++;
}else{
m[p]++;
}
}
if(vs1.size()<=8){
for(int i=0;i<vs1.size();i++){
PII p={vs1[i],v1[i]};
cout<<vs1[i]<<" "<<v1[i]<<" "<<m[p]<<endl;
}
}else{
for(int i=vs1.size()-8;i<vs1.size();i++){
PII p={vs1[i],v1[i]};
cout<<vs1[i]<<" "<<v1[i]<<" "<<m[p]<<endl;
}
}
return 0;
}