File: predobj.cc

package info (click to toggle)
c%2B%2B-annotations 13.02.02-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,576 kB
  • sloc: cpp: 25,297; makefile: 1,523; ansic: 165; sh: 126; perl: 90; fortran: 27
file content (66 lines) | stat: -rw-r--r-- 1,980 bytes parent folder | download | duplicates (5)
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
55
56
57
58
59
60
61
62
63
64
65
66
    #include <algorithm>
    #include <iterator>
    #include <iostream>
    #include <cstring>
    #include "predicates.h"
    using namespace std;

//CONTAINS
    class Contains
    {
        string d_target;
        size_t d_count;
        public:
            Contains(char const *target)
            :
                d_target(target),
                d_count(0)
            {}
            bool operator()(string const &str)
            {
                d_count++;
                return str.find_first_of(d_target) != string::npos;
            }
            bool operator()(string const &s1, string const &s2)
            {
                d_count++;
                return s1.find_first_of(s2) != string::npos;
            }
            size_t count() const
            {
                return d_count;
            }
    };
//=
//MAIN
    int main(int argc, char **argv)
    {
        Contains contains{ "aeiou" };
        if (argc == 1)
            cout << "Counted " <<
                count_if(istream_iterator<string>{ cin },
                         istream_iterator<string>{},
                         PredicateObject1<Contains, string>{contains}
                ) << " words containing vowels ";
        else
            cout << "Counted " <<
                count_if(istream_iterator<string>{ cin },
                        istream_iterator<string>{},
                            [&](string const &target)
                            {
                                return PredicateObject2<Contains, string>
                                        { contains }(target, "aeiou");
                            }
                ) << " words containing vowels ";
        cout << "(read " << contains.count() << " strings)\n";
    }
    /*
        Generated output after executing (predobj.cc being this soure file)

            a.out < predobj.cc
        or
            a.out 2 < predobj.cc

        Counted 107 words containing vowels (read 163 strings)
    */
//=