描述:
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理:
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; }