【华为OJ】简单错误记录
来源:互联网 发布:python 读取文件跳过 编辑:程序博客网 时间:2024/06/05 08:46
我自己的代码没有通过,转载一下“静水流深”的代码:http://www.geekboy.org/huaweioj-five/
#include <iostream>#include <string>#include <queue> //queue容器using namespace std;struct Element {string name;string line;int count;};string *Output(string s,string result[]) //对于每一条记录输出结果{string purename,linenumber;if (s.find("\\")!=string::npos) //我没有考虑到这句判断{int position1=s.find_last_of("\\");int position2=s.find(" ",position1);purename=s.substr(position1+1,position2-position1-1);}else //输入只有文件名没有路径的情况下{int p=s.find_first_of(" ");purename=s.substr(0,p);}if (purename.size()>16)purename=purename.substr(purename.size()-16,16); //得到净文件名int positionline=s.find_last_of(" ");linenumber=s.substr(positionline+1,s.size()-positionline-1);result[0]=purename;result[1]=linenumber;result[2]='1';return result;}int main(){string str;struct Element q[100];int num=0,k=0;vector< Element> final;while (getline(cin,str)){string tmp[3];Output(str,tmp);q[num].name=tmp[0];q[num].line=tmp[1];q[num].count=atoi(tmp[2].c_str());num++;}for (int i=0;i<num;i++){int flag=1;if (k<8){for (int j=0;j<k;j++){if (q[i].name==final[j].name && q[i].line==final[j].line){final[j].count++;flag=0;break;}}if(flag){final.push_back(q[i]);//q[0],k=1,i=1,若相等,final[0].count=2,记录条数k=1k++;}}else //当第九个元素到达时(k==8)时{int flag=1;for (int j=0;j<k;j++){if (q[i].name==final[j].name && q[i].line==final[j].line){final[j].count++;flag=0;break;}}if(flag){final.erase(0+final.begin());//有新的错误记录出现,就删除最早的final.push_back(q[i]);}}}for (int i=0;i<final.size();i++)cout<<final[i].name<<" "<<final[i].line<<" "<<final[i].count<<endl;}
queue模板:这里头文件中虽然包含的是队列头文件,程序中实际上并没有运用,换成vector也一样
queue 模板类的定义在<queue>头文件中。
与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。
定义queue 对象的示例代码如下:
queue<int> q1;
queue<double> q2;
queue 的基本操作有:
入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()
言归正传,这篇代码中灵活运用了string的各种函数,
s.find_last_of('\\'),直接返回最后一个\所在位置,
s.find(" ",position1),返回从position1开始查找空格在当前字符串中的位置atoi(s.c_str()),将string转化成整型
代码比我自己的多两部分内容:
1、没有路径的情况 2、出错记录超过8的情况
另外关于记录重复情况:直接在已进栈的元素上修改,重复的不进栈,这样比起我想要在原来的数组里修改,都进栈再将重复的删除,要简洁清晰,而且我的方法是不对的,已进栈的数据,原来的数组变了,栈里的也不会变。这应该就是错误所在!
0 0
- 华为oj 简单错误记录
- 【华为OJ】简单错误记录
- 华为OJ-------简单错误记录
- 华为OJ(简单错误记录)
- 【华为OJ】【069-简单错误记录】
- 华为OJ——简单错误记录
- 【华为OJ】简单错误记录【未完成】
- 华为oj中级 简单错误记录
- 华为OJ-简单错误记录模块
- 【华为】简单错误记录
- 华为OJ 简单错误记录 (错误,不知道为什么,求大神指教)
- 【华为OJ19】简单错误记录
- 华为-简单错误记录-Java
- [华为机试题]简单错误记录
- 华为机试-简单错误记录
- [华为机试]简单错误记录
- 华为机试---简单错误记录
- 华为2016校园招聘:简单错误记录
- 手把手带你画一个 时尚仪表盘 Android 自定义View
- Spring AOP入门详解
- leetcode--4Sum
- UILabel如何实现两端对齐
- 华为 16
- 【华为OJ】简单错误记录
- Java HashSet与hashCode详解
- activity动画进入和推出从底部到底部
- mysql增加和删除索引相关
- HDU-4497-GCD and LCM-组合计数
- 用两个栈实现队列
- ajax
- CentOS6.5升级手动安装GCC4.8.2
- 梯度下降优化算法综述