StoneHaos

D - Слова и числа

Nov 2nd, 2019
92
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <cctype>
  6. using namespace std;
  7.  
  8. int type(char c) {
  9.     if (isdigit(c))
  10.         return 1;
  11.     if (isalpha(c))
  12.         return 2;
  13.     return 0;
  14. }
  15.  
  16. int main(void) {
  17.     vector<string> digs(0), chars(0);
  18.     vector<bool> types(0);
  19.     string s, buf;
  20.  
  21.     cin >> s;
  22.  
  23.     for (int i = 0; i < s.size(); ++ i) {
  24.         if (buf.empty()) {
  25.             if (type(s[i]) != 0)
  26.                 buf.push_back(s[i]);
  27.             else
  28.                 types.push_back(false);
  29.         }
  30.         else {
  31.             if (type(s[i]) == type(buf[0]))
  32.                 buf.push_back(s[i]);
  33.             else {
  34.                 if (type(s[i]) == 0) {
  35.                     if (type(buf[0]) == 1)
  36.                         digs.push_back(buf);
  37.                     else
  38.                         chars.push_back(buf);
  39.                     buf.clear();
  40.                     types.push_back(true);
  41.                     types.push_back(false);
  42.                 }
  43.                 else {
  44.                     if (type(buf[0]) == 1)
  45.                         digs.push_back(buf);
  46.                     else
  47.                         chars.push_back(buf);
  48.                     buf.clear();
  49.                     types.push_back(true);
  50.                     buf.push_back(s[i]);
  51.                 }
  52.             }
  53.         }
  54.     }
  55.     if (!buf.empty()) {
  56.         if (type(buf[0]) == 1)
  57.             digs.push_back(buf);
  58.         else
  59.             chars.push_back(buf);
  60.         types.push_back(true);
  61.     }
  62.     reverse(digs.begin(), digs.end());
  63.     reverse(chars.begin(), chars.end());
  64.     for (int i = 0; i < types.size(); ++ i) {
  65.         if (types[i]) {
  66.             if (!digs.empty()){
  67.                 cout << digs.back();
  68.                 digs.pop_back();
  69.             }
  70.             else {
  71.                 cout << chars.back();
  72.                 chars.pop_back();
  73.             }
  74.         }
  75.         else cout << ".";
  76.     }
  77.     cout << "\n";
  78.     return 0;
  79. }
RAW Paste Data