File: listcleanup.cc

package info (click to toggle)
icmake 7.18.00-2
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 2,840 kB
  • sloc: ansic: 7,784; makefile: 3,811; sh: 319; cpp: 83
file content (65 lines) | stat: -rw-r--r-- 1,184 bytes parent folder | download | duplicates (8)
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
#include <iostream>
#include <sstream>

using namespace std;


int main(size_t argc, char **argv)
{
    istringstream in(argv[1]);
    size_t idx;
    size_t toRemove = 0;
    while (in >> idx)
    {
        ++toRemove;
        argv[idx] = 0;
        in.seekg(1, ios::cur);
    }

    for 
    (
        char **empty = argv, **end = empty + argc;
            empty != end;               /* walk along all elements  */
                ++empty
    )   
    {
        if (*empty)                     /* next element if non-empty    */
        {
            cout << "In use: " << *empty << endl;
            continue;
        }

        char **used = empty + 1;        /* beyond the empty one: find used */

        for (; used != end && *used == 0; ++used)
            ;                           /* find the next one in use */
            
        if (used == end)                /* at the end */
            break;

        *empty = *used;                 /* swap `used' and `empty' */
        *used = 0;                  
    }

    argc -= toRemove;
    for (size_t idx = 0; idx < argc; ++idx)
        cout << idx << ": " << *argv++ << endl;

    return 0;
        
}