华为OJ(简单错误记录)
2015-08-27 19:27
246 查看
描述 | 开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。 处理: 1、 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加; 2、 超过16个字符的文件名称,只记录文件的最后有效16个字符; 3、 输入的文件可能带路径,记录文件名称不能带路径。 |
---|---|
知识点 | 字符串 |
运行时间限制 | 0M |
内存限制 | 0 |
输入 | 一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。 如:E:\V1R2\product\fpgadrive.c 1325 |
输出 | 将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开,如: fpgadrive.c 1325 1 |
样例输入 | E:\V1R2\product\fpgadrive.c 1325 |
样例输出 | fpgadrive.c 1325 1 |
<pre name="code" class="cpp">#include<iostream> #include<queue> #include<map> #include<string> using namespace std; int main() { string s,tmp,line; map<string,int> imap; queue<string> sq; int posleft,posright,len,spaceleft; while(cin>>s>>line) { posleft=s.find_last_of('\\'); s=s.substr(posleft+1); //将文件名求出 len=s.size(); if(len>16) tmp=s.substr(len-16,16)+" "+line; else tmp=s.substr(0,len)+" "+line; imap[tmp]++; if(imap[tmp]==1) sq.push(tmp); if(sq.size()>8) //imap.erase(sq.front());问题出在这 sq.pop(); } while(!sq.empty()) { cout<<sq.front()<<" "<<imap[sq.front()]<<endl; sq.pop(); } //system("pause"); return 0; }
下面基于未封装的类是OJ下面别的同学实现的,感觉体现了C++的类的思想,挺好的,也贴出来跟大家分享:
#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; class record { public: string name; int line; int count; record() { count = 1; name = ""; line = -1; } void setName(); bool query( record q ); void output(); }; void record::setName() { int pos = name.find( '\\') ; while( pos != string::npos ) { name.erase( 0, pos + 1 ); pos = name.find( '\\' ); }//end while }//end setName bool record::query( record q ) { if( q.name == name && q.line == line ) return true; return false; }//end queryName void record::output() { int temp = name.length(); //cout<<name.substr( temp - 16,16 )<<" "<<line<<" "<<count<<endl; if( name.length() <= 16 ) cout<<name<<" "<<line<<" "<<count<<endl; else cout<<name.substr( temp - 16,16 )<<" "<<line<<" "<<count<<endl; } //end output int main() { vector<record> input; string inputname; int line; while( cin>>inputname>>line ) { //cin>>inputname>>line; record temp; temp.name = inputname; temp.line = line; temp.setName(); if( !input.empty() ) { bool query = false; for( int i = 0; i < input.size(); i++ ) if( input[ i ].query( temp ) ) { query = true; input[ i ].count++; break; } //end if if( !query ) input.push_back( temp ); }//end if else { input.push_back( temp ); }//end else }//end while if( input.size() <= 8 ) { for( int i = 0; i < input.size(); i++ ) input[ i ].output(); }//end if else { for( int i = input.size() - 8; i < input.size(); i++ ) input[ i ].output(); }//end else //system( "pause" ); return 0; }//end main
相关文章推荐
- LeetCode 201 Bitwise AND of Numbers Range 位运算 难度:0
- [HNOI2012][BZOJ2734] 集合选数|状态压缩动态规划|思路题
- GDT、GDTR、LDT、LDTR的理解 [zz]
- LightOJ 1152 - Hiding Gold【二分图】
- socket套接字的使用
- 关于ExpandableListView.setOnChildClickListener获取不到点击事件
- struct的使用
- 【转】在CentOS上安装tomcat
- Cocos2dx学习笔记7:精灵(Sprite)
- React学习笔记(4)---react属性与状态
- 播放视频
- Java LinqCollection 仿Linq的list常用函数
- 各种页面高度
- linux中root密码忘了怎么办?
- NOIP 2014 day1第二题 联合权值
- Metasploit(三)--Msfcli命令
- PIC16F883单片机EUSART串口通信
- hdu 5311 Hidden String (dfs)
- Cheering up the Cows,2008nov,usaco
- javascript float转int