Δημοσιεύτηκε: 02 Απρ 2012, 23:35
από migf1
Ilias95 έγραψε:
Μπορείς να δώσεις ένα παράδειγμα για το πως θα γίνει το tokenization αλλιώς;

Εννοώ απευθείας μέτρημα των στοιχείων που θέλεις (γραμμές, λέξεις, χαρακτήρες) καθώς διαβάζεις το αρχείο, κάτι σαν κι αυτό...

Μορφοποιημένος Κώδικας: Επιλογή όλων
typedef struct Count {
uintmax_t nl; /* newlines count */
uintmax_t w; /* words count */
uintmax_t c, b; /* chars & bytes count */
uintmax_t maxlnlen; /* length of maximum line */
}Count;
...
Count count;
int c;
bool onword = false;
uintmax_t lnchars = 0;

memset( count, 0, sizeof(Count) );
onword = (c=isspace( getc(fp) )) ? false : true;
ungetc(c, fp);
while ( (c=getc(fp)) != EOF )
{
if ( isspace(c) )
{
if ( '\n' == c ) {
count->nl++;
if (count->maxlnlen < --lnchars)
count->maxlnlen = lnchars;
lnchars = 0;
if ( onword ) {
count->w++;
onword = false;
}
}
else if ( onword ) {
count->w++;
onword = false;
}
}
else
onword = true;

if ( c != '\n')
lnchars++;
count->c++;
}

count->b = count->c / sizeof(char);
...


Btw, μόλις είδα πως το mywc δουλεύει μονάχα με ένα αρχείο, ενώ το wc με όσα και να του περάσεις στη γραμμή εντολών (και τα αθροίζει στο τέλος).

ΥΓ. buffer λέμε γενικώς τα arrays που χρησιμοποιούμε για προσωρινή αποθήκευση/διαχείριση