POJ2121 Inglish-Number Translator

 

  
  
  
  
  1. #include <iostream> 
  2. #include <string> 
  3. #include <map> 
  4. #include <algorithm> 
  5. using namespace std;  
  6.  
  7. map<string, int> mapTable;  
  8.  
  9. void initMapTable()  
  10. {  
  11.     mapTable["zero"] = 0;  
  12.     mapTable["one"] = 1;  
  13.     mapTable["two"] = 2;  
  14.     mapTable["three"] = 3;  
  15.     mapTable["four"] = 4;  
  16.     mapTable["five"] = 5;  
  17.     mapTable["six"] = 6;  
  18.     mapTable["seven"] = 7;  
  19.     mapTable["eight"] = 8;  
  20.     mapTable["nine"] = 9;  
  21.     mapTable["ten"] = 10;  
  22.     mapTable["eleven"] = 11;  
  23.     mapTable["twelve"] = 12;  
  24.     mapTable["thirteen"] = 13;  
  25.     mapTable["fourteen"] = 14;  
  26.     mapTable["fifteen"] = 15;  
  27.     mapTable["sixteen"] = 16;  
  28.     mapTable["seventeen"] = 17;  
  29.     mapTable["eighteen"] = 18;  
  30.     mapTable["nineteen"] = 19;  
  31.     mapTable["twenty"] = 20;  
  32.     mapTable["thirty"] = 30;  
  33.     mapTable["forty"] = 40;  
  34.     mapTable["fifty"] = 50;  
  35.     mapTable["sixty"] = 60;  
  36.     mapTable["seventy"] = 70;  
  37.     mapTable["eighty"] = 80;  
  38.     mapTable["hundred"] = 100;  
  39.     mapTable["thousand"] = 1000;  
  40.     mapTable["million"] = 1000000;  
  41. }  
  42. void solve(string& str)  
  43. {  
  44.     string::size_type pos = str.find_first_of(' ');  
  45.     if (pos == string::npos)  
  46.     {//只有一个单词  
  47.         if (str == "negative")  
  48.         {  
  49.             cout << "-0" << endl;  
  50.         }  
  51.         else if (mapTable.find(str) != mapTable.end())  
  52.         {  
  53.             cout << mapTable[str] << endl;  
  54.  
  55.         }  
  56.     }  
  57.     else  
  58.     {//至少个单词  
  59.         string input = str;  
  60.         int sum = 0,msum = 0,tsum = 0,hsum = 0;  
  61.         bool bMinus = false;  
  62.         int count = 0;  
  63.         string::iterator start = input.begin();  
  64.         string::iterator end = input.end();  
  65.         do   
  66.         {  
  67.             string word;  
  68.             end = find(start,input.end(),' ');//找到分隔符  
  69.             copy(start,end,back_inserter(word));  
  70.             ++count;//单词计数  
  71.             if (word == "negative")  
  72.             {  
  73.                 bMinus = true;  
  74.             }  
  75.             else  
  76.             {  
  77.                 if (count == 2 && word == "zero")  
  78.                 {  
  79.                     bMinus = false;  
  80.                 }  
  81.                 int curNum = mapTable[word];  
  82.                 if (curNum == 100)  
  83.                 {  
  84.                     hsum = sum * 100;  
  85.                     sum = 0;  
  86.                 }  
  87.                 else if (curNum == 1000)  
  88.                 {  
  89.                     tsum = (hsum + sum) * 1000;  
  90.                     hsum = 0;  
  91.                     sum = 0;  
  92.                 }  
  93.                 else if (curNum == 1000000)  
  94.                 {  
  95.                     msum = (tsum + hsum + sum) * 1000000;  
  96.                     tsum = 0;  
  97.                     hsum = 0;  
  98.                     sum = 0;  
  99.                 }  
  100.                 else  
  101.                 {  
  102.                     sum += curNum;  
  103.                 }  
  104.             }  
  105.             if (end == input.end())  
  106.             {  
  107.                 if (bMinus)  
  108.                     cout << "-";  
  109.                 cout << msum +tsum + hsum + sum << endl;  
  110.                 break;  
  111.             }  
  112.             start = ++end;  
  113.         } while (end != input.end());  
  114.     }  
  115. }  
  116. int main()  
  117. {  
  118.     string str;  
  119.     initMapTable();  
  120.     while(getline(cin,str))  
  121.     {  
  122.         if (str.length() == 0 || str.length() == 1)  
  123.             continue;  
  124.         solve(str);  
  125.     }  
  126.     return 0;  

 

你可能感兴趣的:(职场,ACM,休闲)