Οδηγός Μελέτης - Εισαγωγή στον Προγραμματισμό

Α14.18 · Εύρεση Λέξεων

Online τελική εξέταση Δεκεμβρίου 2023, Εξέταση #3 (Frozen Themed), Θέμα 3 · Δυσκολία ★★☆ · programming · Κεφάλαια: 14, 18

Πρόγραμμα: find.c (25 μονάδες)

Γράψτε ένα πρόγραμμα που παίρνει δύο ορίσματα: (1) το όνομα του αρχείου που περιέχει το σύνολο των λέξεων που έχουμε διαθέσιμες και (2) την υπακολουθία που ψάχνουμε μέσα σε αυτές τις λέξεις. Το πρόγραμμά μας πρέπει να τυπώνει όσες λέξεις περιέχουν την υπακολουθία (για παράδειγμα το “snow” περιέχεται στο “snowman” αλλά δεν περιέχεται στο “noman”) και το μέρος που ταιριάζει στην υπακολουθία πρέπει να τονιστεί με bold χαρακτήρες. Προσοχή: μια υπακολουθία μπορεί να υπάρχει περισσότερες από μία φορές σε μια λέξη. Παράδειγμα εκτέλεσης ακολουθεί:

$ cat test.txt
Anna
Arendelle
Sven
Hans
Ice
Snow
$ gcc -o find find.c
$ ./find test.txt e
Arendelle
Sven
Ice
$ ./find /usr/share/dict/words snowm
snowman
snowman's
snowmen
snowmobile
snowmobile's
snowmobiled
snowmobiles
snowmobiling

Σημείωση: στο πρωτότυπο το παράδειγμα είναι στιγμιότυπο τερματικού (εικόνα), όπου τα τμήματα που ταιριάζουν (όλα τα e στο Arendelle, Sven, Ice και το snowm στις υπόλοιπες) εμφανίζονται με έντονους χαρακτήρες.

Υπόδειξη

Διαβάστε το αρχείο γραμμή-γραμμή με fgets (αφαιρώντας το '\n') και σε κάθε λέξη ψάξτε όλες τις εμφανίσεις της υπακολουθίας, π.χ. με επαναλαμβανόμενες κλήσεις της strstr που συνεχίζουν μετά το προηγούμενο ταίριασμα. Τυπώστε τα κομμάτια ανάμεσα στα ταιριάσματα κανονικά και τα ταιριάσματα ανάμεσα στις ANSI escape sequences για bold και επαναφορά. Σκεφτείτε τι σημαίνει κενή υπακολουθία και τι γίνεται με επικαλυπτόμενα ταιριάσματα (π.χ. aa μέσα στο aaa).

Αριθμός στον οδηγό: Α14.18 (στο κεφάλαιο) · Μόνιμο αναγνωριστικό: exam-2023-fall-ex3-q3 · Σύνδεσμος: https://progintro.github.io/study/questions/exams/exam-2023-fall-ex3-q3.html · Markdown (GitHub)