一直对stl不熟悉,但是发现在处理一些字符串问题的时候,stl用起来还是相当顺手的,所以这两天果断的看了些stl的知识,现在小结一下。 对于stl的map,首先引入的头文件是: #include <map> 第二个就是string。string很强大,要用的成员函数有: 下面就是poj1002,wa了一次就是因为没有看到,当没有重复的串时,要输出:No duplicates. ;还tle了一次,是因为cin,cout速度太慢,让酱油教主教了下输入输出优化,然后就过了。可以看到使用stl速度不是很快,对时空复杂度把握不是很好,但是其代码量小多了。 代码: #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<queue>
#include<map>
#include<string>
#include<iostream>
using namespace std;
#define maxn 100010
map <string,int>ss;
int d[30]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,9},ans[maxn];
int n;
int main()
{
int i,j,k;
string st1,st2;
map<string,int>::iterator iter;
ios::sync_with_stdio(false);//输入优化,使用后,不能和scanf混合使用
cin >> n;
i=0;
while(n--)
{
i++;
cin>>st1;
k=-1;
st2.clear();
st2.resize(8,'-');
for(j=0;j<st1.length();j++)
if(st1[j]>='A' && st1[j]<='Z')
{
k++;
if(k==3) { st2[k]='-'; k++; }
st2[k]=d[st1[j]-'A']+'0';
}
else if(st1[j]>='0' && st1[j]<='9')
{
k++;
if(k==3) { st2[k]='-'; k++; }
st2[k]=st1[j];
}
else
{
continue;
}
iter = ss.find(st2);
if(iter==ss.end())
{
ss[st2]=i;
ans[i]=1;
}
else
{
i--;
ans[iter->second]++;
}
}
bool flag=0;
for(iter=ss.begin();iter!=ss.end();iter++)
{
if(ans[iter->second]!=1)
{
flag=1;
cout<<iter->first<<' '<<ans[iter->second]<<endl;
}
}
if(!flag) cout << "No duplicates." << endl;
return 0;
}
|
STL map 和 string
最新推荐文章于 2021-05-08 22:12:32 发布
转载自: http://hi.baidu.com/blackstar08/blog/item/a385507619bd9a15b051b9ac.html