这道题不难,注意几点,最多八条记录的意思是超过八条,只取最后的八条,文件名称最多16个字符只要这两点做好了就可以了,但是比较尴尬的是,我做出一种解法,在别的平台所有测试用例通过,在华为官方显示格式错误,我无论怎么修改都过不了,如果哪位大神看到,求指点:
1. 华为测试平台结果显示格式错误,本人找不到什么错误。
#include<iostream>
#include<string>
#include<vector>
using namespace std;
struct file
{
string fileName;
string lineNo;
int count;
};
void Reverse(string &inStr)
{
//翻转字符串
int i = 0;
int j = inStr.size() - 1;
char tmp = ' ';
while (i < j)
{
tmp = inStr[i];
inStr[i] = inStr[j];
inStr[j] = tmp;
i++;
j--;
}
}
void Calculate(string inStr, vector<file> &res)
{
int i = inStr.size()-1,j = 0;
string lineNo = "";
string fileName = "";
bool flag = false;
for (; i >= 0; i--)
{
if (inStr[i] == ' ')
{
i--;
break;
}
lineNo += inStr[i];
}
for (; i >= 0; i--,j++)
{
if (inStr[i] == '\\'||j >= 16)
{
break;
}
fileName += inStr[i];
}
//翻转字符串
Reverse(fileName);
Reverse(lineNo);
for (i = 0; i < res.size(); i++)
{
if (res[i].fileName == fileName && res[i].lineNo == lineNo)
{
res[i].count++;
flag = true;
break;
}
}
if (!flag)
{
file t;
t.fileName = fileName;
t.lineNo = lineNo;
t.count = 1;
res.push_back(t);
}
}
int main()
{
string inStr = "";
vector<file> res;
while (getline(cin, inStr))
{
Calculate(inStr, res);
}
int i = 0;
if (res.size() > 8)
{
i = res.size() - 8;
}
for (; i < res.size(); i++)
{
cout << res[i].fileName << " " << res[i].lineNo << " " << res[i].count << endl;
}
return 0;
}
2.通过代码
#include<iostream>
#include<string>
#include<vector>
using namespace std;
struct error
{
string filefullname;
string filename;
string lineno;
int count;
} ;
typedef error Error;
int main()
{
vector<Error> result;
Error temp;
string ss;
string filepath;
int number = 0;
bool flag=0;
while (cin >> filepath >> temp.lineno)
{
number++;
temp.count = 1;
ss = filepath.substr(filepath.find_last_of("\\")+1, filepath.length());
temp.filefullname = ss;
if (ss.length() > 16)
{
temp.filename = ss.substr(ss.length()-16);
}
else
{
temp.filename = ss;
}
for (vector<Error>::iterator iter = result.begin(); iter != result.end(); iter++)
{
if ((*iter).filefullname == temp.filefullname && (*iter).lineno == temp.lineno)
{
(*iter).count++;
flag = 1;
break;
}
}
if (!flag)
{
result.push_back(temp);
}
flag = 0;
}
if (result.size() <= 8)
{
for (int i = 0; i < result.size(); i++)
cout << result[i].filename << " " << result[i].lineno << " " << result[i].count << endl;
}
else
{
for (int i = result.size() - 8; i < result.size(); i++)
cout << result[i].filename << " " << result[i].lineno << " " << result[i].count << endl;
}
return 0;
}