Annotation of researchv10no/cmd/cfront/libstring/test13.c, revision 1.1

1.1     ! root        1: /* sort standard input and print unique word count */
        !             2: #include "pair.h"
        !             3: #include "list.h"
        !             4: 
        !             5: listdeclare(pairST)
        !             6: listoutimplement(pairST)
        !             7: 
        !             8: pairST_list    sort(pairST_list);
        !             9: 
        !            10: main()
        !            11: {
        !            12:        String  s;
        !            13:        pairST_list     myList;
        !            14:        /* input */
        !            15:        while (cin >> s)
        !            16:                myList.put(new pair(s,1));
        !            17: // cout << myList << "\n";
        !            18:        myList = sort(myList);
        !            19:        /* print result */
        !            20:        cout << myList << "\n";
        !            21: }
        !            22: 
        !            23: pairST_list
        !            24: sort(pairST_list myList)
        !            25: {
        !            26:        /* (bubble) sort */
        !            27:        int swapFlag;
        !            28:        if ( myList )
        !            29:                do {
        !            30:                        swapFlag = FALSE;
        !            31:                        pairST_list_iterator    it(myList);
        !            32:                        pair    *x;
        !            33:                        pair    *y;
        !            34:                        while ( it.nextX(x) && it.peekX(y) ) {
        !            35: // cout << "Compare " << x << " and " << y << "\n";
        !            36:                                if ( x->word > y->word ) {
        !            37: // cout << "greater\n";
        !            38:                                        it.remove();
        !            39:                                        it.next();
        !            40:                                        it.r_insert(x);
        !            41:                                        swapFlag = TRUE;
        !            42:                                } else if ( x->word == y->word ) {
        !            43: // cout << "equal\n";
        !            44:                                        it.remove();
        !            45:                                        y->count += x->count;
        !            46:                                        delete x;
        !            47:                                }
        !            48:                        }
        !            49: // cout << myList;
        !            50:                } while ( swapFlag );
        !            51:        return myList;
        !            52: }
        !            53: 
        !            54: 
        !            55: ostream&
        !            56: operator<<(ostream& oo, pairST p)
        !            57: {
        !            58:        return oo << "\n" << p->word << "\t" << p->count;
        !            59: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.