私はいつもstlに慣れていませんが、文字列の問題を処理するとき、stlは非常に使いやすいことがわかったので、過去2日間でstlの知識を断固として読んだので、それを要約します。 stlのマップの場合、最初に導入されたヘッダーファイルは次のとおりです。#include <map> 2番目は文字列です。文字列は非常に強力です。使用するメンバー関数は次のとおりです。 以下はpoj1002です。waは見られないので1回です。重複する文字列がない場合は、出力:重複なし。; cinとcoutの速度が遅すぎるため、1回だけ解決します。醤油のマスターに最適化させます。入力と出力、そしてそれは終わりです。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マップと文字列
転載元:http://hi.baidu.com/blackstar08/blog/item/a385507619bd9a15b051b9ac.html
おすすめ
転載: blog.csdn.net/zjsxzjb/article/details/6685186
おすすめ
ランキング