描述:
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理:
1、 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加;
2、 超过16个字符的文件名称,只记录文件的最后有效16个字符;
3、 输入的文件可能带路径,记录文件名称不能带路径。
知识点: 字符串
题目来源: 内部整理
练习阶段: 中级
运行时间限制:无限制
内存限制:无限制
输入:
一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。
如:E:\V1R2\product\fpgadrive.c 1325
输出:
将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开,如:
fpgadrive.c 1325 1
样例输入:
E:\V1R2\product\fpgadrive.c 1325
样例输出:
fpgadrive.c 1325 1
解法如下,仅供参考:
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <stdio.h>
using namespace std;
string getFileName(string filePath){
// getFileName("E:\\V1R2\\product\\fpgadrive.c")
// fpgadrive.c
int len = filePath.length();
int start = len-1;
while(start>=0 && filePath[start]!='\\') start--;
if(len-1-start>16)
start = len-1-16;
return filePath.substr(start+1);
}
int main(int argc, char const *argv[])
{
char str[100];
char lineNo[100];
map<string, int> strMap;
vector<string> vec(8,"");
int index = 0;
while(scanf("%s %s", str, lineNo) != EOF){
// cout<<"test"<<"##"<<str<<"##"<<lineNo<<endl;
string tmpStr = str;
string tmpName = getFileName(tmpStr)+" "+lineNo;
if(strMap.find(tmpName) != strMap.end()){
strMap[tmpName]++;
}else{
if(index==8){
index = 0;
if(strMap.find(vec[index]) != strMap.end()){
strMap.erase(strMap.find(vec[index]));
}
vec[index] = tmpName;
strMap[tmpName]++;
index++;
}else{
vec[index] = tmpName;
strMap[tmpName]++;
index++;
}
}
}
for(int i=0; i<strMap.size(); i++){
string tmpName = vec[i];
cout<<tmpName<<" "<<strMap[tmpName]<<endl;
}
return 0;
}