POJ 1951 - Extra Krunch

http://poj.org/problem?id=1951

概要

与えられた文を krunch した文を答える.

krunch された文は母音を含まず,また同じアルファベットが2回以上出現しない. 同じアルファベットを含む文を krunch した場合,2回目以降に現れるアルファベットは削除される. 記号は何度現れてもよい.

krunch された文は2つ以上空白が連続することはない. また,記号の前に空白があってはならない.

制約

解法

やるだけ.

 1 #include <iostream>
 2 #include <sstream>
 3 #include <cctype>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9   string s;
10   getline(cin, s);
11   bool seen[26];
12   fill_n(seen, 26, false);
13   stringstream ss;
14   for (string::const_iterator it = s.begin(); it != s.end(); ++it) {
15     switch (*it) {
16       case 'A':
17       case 'E':
18       case 'I':
19       case 'O':
20       case 'U':
21         break;
22       default:
23         if (isupper(*it)) {
24           if (!seen[*it-'A']) {
25             seen[*it-'A'] = true;
26             ss << *it;
27           }
28         } else {
29           ss << *it;
30         }
31     }
32   }
33 
34   ostringstream oss;
35   ss >> s;
36   oss << s;
37   while (ss >> s) {
38     if (isupper(s[0])) {
39       oss << ' ';
40     }
41     oss << s;
42   }
43   cout << oss.str() << endl;
44   return 0;
45 }
poj/1951.cc