Δημοσιεύτηκε: 05 Ιούλ 2011, 21:05
από migf1
Off topic:
Οι αναλυτές έχουν μεγαλύτερο θεωρητικό υπόβαθρο (θεωρητική πληροφορική = computer science) οι μηχανικοί έχουν μεγαλύτερο πρακτικό υπόβαθρο (μηχανικός υπολογιστών = software engineering)

Να επεκτείνω λιγάκι την άσκηση του φίλου linuxs:
α) προσθέστε και καταμέτρηση των λέξεων που υπάρχουν στο αρχείο (λίγο ζόρικο ;) ) διαχωρισμένες από χαρακτήρες που κάνουν TRUE το macro: isspace(c) της <stdlib.h>
β) προσθέστε και καταμέτρηση γραμμών, σημείων στίξης, μη κενών χαρακτήρων και κεφαλαίων γραμμάτων (hint: <stdlib.h>)
γ) αν ο χρήστης δεν δώσει το όνομα του αρχείου στο command line, ζητήστε το μέσα στο πρόγραμμα.

Αν ζοριστείτε πολύ, εδώ είναι ο κώδικας:
Spoiler: show
Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h> // for exit()
#include <ctype.h> // for isspace(), etc
#include <string.h> // for strncpy(), etc

#define MAXINBUF 255+1

// ---------------------------------------------------------------------------------
int main( int argc, char *argv[] )
{
int c, addword = 1; // addword is boolean
unsigned long int nchars=0, nwords=0, nlines=0;
unsigned long int nblanks=0, npunct=0, ndigits=0, nalpha=0, nupper=0;
char filename[MAXINBUF] = "";
FILE *fp = NULL;

if ( argc > 1) // 1st argument exists
strncpy(filename, argv[1], MAXINBUF); // use it as filename
else { // no command line arguments
printf("filename to inspect: "); // ask user for filename
fgets(filename, MAXINBUF, stdin); // read filename
filename[ strlen(filename)-1 ] = '\0'; // remove '\n' from the end
}

fp = fopen(filename, "r");
if ( !fp ) {
puts("*** could not open file, aborting program...");
exit( EXIT_FAILURE );
}

while ( (c=fgetc(fp)) != EOF )
{
nchars++;
if ( isspace(c) ) {
addword = 1;
nblanks++;
}
else if( addword ) {
++nwords;
addword = 0;
}
if ( c == '\n')
nlines++;
else if ( isalpha(c) )
nalpha++;
else if ( isdigit(c) )
ndigits++;
else if ( ispunct(c) )
npunct++;
else if ( isupper(c) )
nupper++;

}
fclose(fp);

if ( nchars == 0 )
printf("%s:\tempty file\n", filename);
else {
printf( "File: %s\n\t%12lu lines\n\t%12lu words\n",
filename, nlines+1, nwords );
printf( "\ncharacter analysis:\n\t%12s: %lu (including crlf)\n",
"total", nchars );
printf("\t%12s: %lu\n", "blanks", nblanks);
printf("\t%12s: %lu\n", "digits", ndigits);
printf("\t%12s: %lu\n", "letters", nalpha);
printf("\t%12s: %lu\n", "upper-case", nupper);
printf("\t%12s: %lu\n", "punctuation", npunct);
}

exit( EXIT_SUCCESS );
}

@linuxs: Τα swap δεν θα τα βάλεις στην αρχική δημοσίευση;