# C++ Notes: Examples: Lefthand words 2

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
    // -- lefthand2.cpp - Find longest word typed with left hand.
    //    Fred Swartz - 2002-09-16

    // Use a vector to save all words of longest length.
    // Note: should use a set because only want one copy.

    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;

    //--- prototypes
    bool isOnlyLeftHand(string w);

    //======================================================= main
    int main() {
        string word;     // holds each word as read
        vector<string> maxWords;  // longest words
        int maxlen = 0;  // length of longest word

        while (cin >> word) {
            if (word.length() >= maxlen && isOnlyLeftHand(word)) {
                if (word.length() > maxlen) {
                    maxlen = word.length(); // new max
                    maxWords.clear();       // clear shorter words
                }
                //--- Add word only if not already there
                //--- Could use find function, but ...
                bool add = true;
                for (int i=0; i<maxWords.size(); i++) {
                    if (maxWords[i] == word) {
                        add = false;
                        break;
                    }
                }
                if (add) {
                    maxWords.push_back(word);  // remember this word
                }
            }
        }

        cout << "Words of length " << maxlen << endl;
        for (int i=0; i<maxWords.size(); i++) {
            cout << maxWords[i] << endl;
        }

        return 0;
    }//end main

    //=============================================== isOnlyLeftHand
    bool isOnlyLeftHand(string w) {
        return w.find_first_not_of("qwertasdfgzxcvb") == string::npos;
    }//end isOnlyLeftHand