例如输入:OneTwoThree 输出:123
输入:OneTwoDoubleTwo 输出:1222
输入:1Two2 输出:ERROR
输入:DoubleDoubleTwo 输出:ERROR
有空格,非法字符,两个Double相连,Double位于最后一个单词 都错误
本题基本不涉及复杂算法,理清思路,不要忘记关键位置的判断
const string s[11] ={"Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Double"};
void print(int n){cout<<n;}
int main()
{
string str;
map<string,int> str_map;
for(int i=0; i<11; ++i)
str_map.insert( std::pair<string,int>(s[i],i));
vector<int> vect;
for(;;){
again:
getline(cin,str);
vect.clear();
int pos = 0;
bool is_double =false;
int len = str.length();
int i,j;
for(i=0; i<len;){
for(j=3; j<=6; ++j){
string tmp = str.substr(i,j);
map<string,int>::iterator it = str_map.find(tmp);
if( it != str_map.end()){
if(j != 6){
vect.push_back(it->second);
if(is_double){
vect.push_back(it->second);
is_double = false;
}
}
else{
if(is_double){
cout<<"ERROR"<<endl;
goto again;
}
is_double = true;
}
i += j;
break;
}
}
if(j == 7){
cout<<"ERROR"<<endl;
goto again;
}
}
if(is_double)
cout<<"ERROR"<<endl;
else{
for_each(vect.begin(),vect.end(),print);
cout<<endl;
}
}
return 0;
}