black69 Δημοσ. 21 Ιουλίου 2007 Δημοσ. 21 Ιουλίου 2007 Βρε παιδια helpppp!! Δινω τη Δευτερα εξεταση στη C και δεν ξερω πως λυνεται αυτη η ασκηση.... Γράψτε ένα πρόγραμμα που δέχεται ως ορίσματα γραμμής-διαταγής μία λέξη και κανένα ή περισσότερα ονόματα αρχείων. Εάν η λέξη εισόδου δεν ακολουθείται από ονόματα αρχείων, τότε το πρόγραμμα πρέπει να διαβάζει από την τυποποιημένη είσοδο. Αλλιώς, πρέπει να ανοίγει τα αρχεία με τη σειρά. Το πρόγραμμα πρέπει να αναφέρει πόσες φορές η δοσμένη λέξη υπάρχει σε κάθε αρχείο και τον αύξοντα αριθμό κάθε γραμμής στην οποία εμφανίζεται. Το όνομα αρχείου και η λέξη πρέπει να αναφέρονται και αυτοί στην περίπτωση αυτή. Πρέπει να υπάρχει έλεγχος για το σωστό αριθμό των ορισμάτων και αν τα αρχεία μπορούν να ανοιχθούν επιτυχώς. Εάν ένα αρχείο δεν μπορεί να ανοιχθεί, πρέπει το πρόγραμμα να αναφέρει το γεγονός και να συνεχίζει με το επόμενο αρχείο. Τέλος, το πρόγραμμα θα πρέπει να αναγνωρίζει μια επιλογή –t, που να το κάνει να αναφέρει τις συνολικές εμφανίσεις της δοσμένης λέξης για όλα τα υπάρχοντα αρχεία που εξετάστηκαν, καθώς και το μέσο όρο εμφάνισης της λέξης ανά αρχείο. Ενδεικτικές χρήσεις του προγράμματος: $./mygrep test file.txt file2.txt file.txt (test): 4 (lines: 1, 4, 5, 6) file2.txt (test): 10 (lines: 20, 25, 28, 33) $./mygrep –t test file.txt file2.txt file.txt (test): 4 (lines: 1, 4, 5, 6) file2.txt (test): 10 (lines: 20, 25, 28, 33, 108) total: 14, average: 7 Προσπαθησα να κανω κατι αλλα μαλλον ασχετα εκανα....: #include<stdio.h> #include<string.h> int main(int argc,char *argv[]) { FILE *infile1; FILE *infile2; int i; char *c; char buf[101]; int le3i1; int sum=0; if(argc>4) { printf("%s\n", argv[1]); i=3; le3i1=0; while(fscanf(infile1,"%s",buf)!=EOF) { c=strstr(buf,argv[1]); if(c!=NULL) le3i1++; i++; sum++; } } for(i=3;i<sum;i++) { printf("Sto %s arxeio iparxei i le3i %s, %d fores\n", argv,argv[1],le3i1); } } sorry but help me plss
bokarinho Δημοσ. 22 Ιουλίου 2007 Δημοσ. 22 Ιουλίου 2007 Ο παρακάτω κώδικας δεν αποτελεί την τελική λύση στο άνωθεν πρόβλημα. Αυτό που κάνει βέβαια είναι να υπολογίζει το πόσες φορές εμφανίζεται μία λέξη σε ένα ή πολλά αρχεία και επίσης να λέει και σε ποιες γραμμές βρέθηκε η λέξη. Δεν θέλω να σου τα δώσω όλα έτοιμα, προβληματίσου λίγο και ότι δεν καταλαβαίνεις εδώ είμαστε να σε βοηθήσουμε!! > #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define MAX_SIZE 512 int *FindWord(char *filename, char *word, int *CountTimes, int *ArraySize) { FILE *f = fopen(filename, "r"); int i = 0; int k = 1; int j = 0; char *buffer = NULL; char *p = NULL; int TestIndex = 0; int *Lines = NULL; if(f == NULL) { fprintf(stderr, "Error, can not open %s file.\n", filename); return NULL; } else { buffer = (char *)calloc(MAX_SIZE, sizeof(char)); if(buffer == NULL) { printf("Memory Fault.\n"); return NULL; } //Get space for an integer. Lines = (int *)calloc(1,sizeof(int)); if(Lines == NULL) { printf("Memory Fault.\n"); return NULL; } else { while(fgets(buffer, MAX_SIZE, f) != NULL) { if(buffer[strlen(buffer)-1] == '\n') buffer[strlen(buffer)-1] = '\0'; p = strstr(buffer, word); if(p) { Lines[j++] = k; TestIndex = buffer - p; if(TestIndex < 0) TestIndex = -TestIndex; if(buffer[TestIndex + strlen(word)] == ' ' || buffer[TestIndex + strlen(word)] == '.' || buffer[TestIndex + strlen(word)] == '?' || buffer[TestIndex + strlen(word)] == ',' || buffer[TestIndex + strlen(word)] == '!' || buffer[TestIndex + strlen(word)] == '\0') i++; while(p != NULL) { p = strstr(p+1, word); if(p) { TestIndex = buffer - p; if(TestIndex < 0) TestIndex = -TestIndex; if(buffer[TestIndex + strlen(word)] == ' ' || buffer[TestIndex + strlen(word)] == '.' || buffer[TestIndex + strlen(word)] == '?' || buffer[TestIndex + strlen(word)] == ',' || buffer[TestIndex + strlen(word)] == '!' || buffer[TestIndex + strlen(word)] == '\0') i++; } } } //Clear buffer. memset(buffer, 0, MAX_SIZE * sizeof(char)); //Shows the line we are searching. k++; } } fclose(f); free(buffer); *CountTimes = i; *ArraySize = j; //Return the array that hold the line numbers. return Lines; } } int main(int argc, char **argv) { int i; int *r = NULL; int Found = 0; int Size = 0; /*for(i = 1; i < argc; i++) r += FindWord(argv[i], "kai");*/ r = FindWord("test.txt", "kai", &Found, &Size); printf("Found the word %d times in file\n", Found); //Print the lines. printf("Lines that the word was found are:\n"); for(i = 0; i < Size; i++) printf("%d ", r[i]); return 0; }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.