STL -- 关于一些字符串处理用到的函数和数据结构
来源:互联网 发布:linux dhcp 作用 编辑:程序博客网 时间:2024/06/05 04:40
最近做了一道华为的笔试题,没有涉及到什么算法,就是很多细节很烦,和涉及到很多STL的操作,很多都忘了,现在重拾~
题目:
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理:
1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)
2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)
3.输入的文件可能带路径,记录文件名称不能带路径
输入
E:\V1R2\product\fpgadrive.c 1325
输出
fpgadrive.c 1325 1
#include<iostream>#include<string>#include<cstring> #include<vector>#include<algorithm>using namespace std;typedef pair<string, int> PAIR; //定义文件名行号 和 次数vector<PAIR> myvect;//用vector存储//自己定义比较函数,返回次数从大到小排序struct CmpByValue { bool operator()(const PAIR& lhs, const PAIR& rhs) { return lhs.second > rhs.second; } }; int main(){ string ss; while(getline(cin,ss)){ if (ss.size() == 0) break; int last = ss.size()-1; int first; for(int i = last;i>0;i--){ if(ss[i] == '\\'){ break; } else{ first = i; } } string s = ss.substr(first,last);//截取文件名+行号,从字符串后面开始截取 //cout<<s<<endl; vector<PAIR> ::iterator it; bool isexist = false; //插入到vector中 for(it = myvect.begin();it != myvect.end();++it){ if((*it).first == s){ (*it).second++; isexist = true; break; } } if(it == myvect.end() && !isexist){ myvect.push_back(make_pair(s,1)); } } //题目中要求是稳定的,所以这里用stable_sort stable_sort(myvect.begin(),myvect.end(),CmpByValue()); vector<PAIR> ::iterator it; //输出结果 int count = 8;//只输出8条记录 for(it = myvect.begin();it != myvect.end();++it){ if(count == 0) break; //控制文件名最大为后16个字符 string ss = (*it).first; int find = ss.find(' '); int head,len; if(find >= 16){ head = find - 16; len = 16; }else{ head = 0; len = find; } string filename = ss.substr(head,len); string times = ss.substr(find+1); cout<<filename<<" "<<times<<" "<<(*it).second<<endl; count--; }}
这里涉及到几个string的函数
string substr(size_t pos = 0, size_t len = npos) const;
第一个参数是要截取的开始位置,第二个是要截取的长度(这个不要搞错了,不要以为是结束位置,一开始我以为是……)
string ss; cin>>ss; cout<<ss.substr(0,ss.size()-1)<<endl; cout<<ss.substr(0)<<endl; cout<<ss.substr(3,5)<<endl; /*输出为 01234567890 0123456789 01234567890 34567 */
关于find函数:
size_t find (const string& str, size_t pos = 0) const;
size_t find (const char* s, size_t pos = 0) const;
size_t find (const char* s, size_t pos, size_t n) const;
size_t find (char c, size_t pos = 0) const;
这个函数就是找到参数1出现位置,第二个参数是控制在pos位置以及之后去找
关于pair
//pair模板的定义template <class T1, class T2> struct pair;//构造赋值函数make_pairtemplate <class T1,class T2> pair<T1,T2> make_pair (T1 x, T2 y) { return ( pair<T1,T2>(x,y) ); } //访问成员 p.first; p.second;//example#include <utility> // std::pair#include <iostream> // std::coutint main () { std::pair <int,int> foo; std::pair <int,int> bar; foo = std::make_pair (10,20); bar = std::make_pair (10.5,'A'); // ok: implicit conversion from pair<double,char> std::cout << "foo: " << foo.first << ", " << foo.second << '\n'; std::cout << "bar: " << bar.first << ", " << bar.second << '\n'; return 0;}
关于sort
stable_sort是保持稳定性的排序算法,在这道题里用的就是这个排序
template <class RandomAccessIterator, class Compare> void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
- STL -- 关于一些字符串处理用到的函数和数据结构
- 处理字符串用到的函数
- 关于SQL字符串处理的一些函数
- 记录几个用到的字符串处理函数。
- 今天用到的几个字符串处理函数
- 自己整理的关于C的一些字符串处理函数
- 关于PHP的一些常用的字符串处理函数
- 借助STL实现一些常用的C++的几种字符串处理函数
- 感觉经常用到的一些字符处理的函数
- 一些关于字符串的函数
- 字符串处理用到的函数 脑袋记不全 Mark
- C中关于字符串和字符的处理函数
- JS和Jquery中关于-字符串处理-的函数总结
- 经常用到的一些函数
- sybase一些用到的函数
- 关于字符串处理的一些总结
- 几个有用的STL函数和编程中的一些细节处理
- 字符串处理的一些常用函数
- SQL Server里建表保存后要修改遇到无法保存修改的问题
- 排序算法题
- Oracle10g自定义聚合函数(字符串拼接)
- http请求
- Harris角点检测(Python-OpenCV)
- STL -- 关于一些字符串处理用到的函数和数据结构
- android Binder
- 巧用ViewPager 打造不一样的广告轮播切换效果
- 互联网协议
- 最小生成树—Prim算法和Kruskal算法
- 编程面试过程中常见的10大算法概念汇总
- 利用Windows API实现精确计时器
- CCF认证 201604-3 路径解析
- 信号量的原理总结