Her er en løsning på opgaven (som endvidere understøtter en -n option, der afstedkommer udskrift af linienumre): Vi vil antage at programmet findes på kildefilen simple-grep.c. Oversættelse og kørsel (søgning i kildefilen selv) kan foregå på denne måde: Outputtet er: Hele problemløsningen forekommer i main funktionen, hvilket er dårlig stil.#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLINE 200
int main(int argc, char *argv[]) {
char line[MAXLINE], *pattern, *file_name;
FILE *ifp;
int line_numbers, n = 1;
if (argc == 3) {
file_name = argv[2]; line_numbers = 0; pattern = argv[1];
}
else if (argc == 4 && strcmp(argv[1], "-n") == 0) {
file_name = argv[3]; line_numbers = 1; pattern = argv[2];
}
else {
fprintf(stderr, "Calling form: search [-n] search_string file\n");
exit(1);
}
if ((ifp = fopen(file_name, "r")) == NULL){
fprintf(stderr, "\nCannot open %s\n\n", file_name);
exit(1);
}
while(fgets(line, MAXLINE, ifp) != NULL){
if (strstr(line, pattern) != NULL){
if (line_numbers)
printf("%3i: %s", n, line);
else
printf("%s", line);
}
n++;
}
fclose(ifp);
return 0;
}
> gcc simple-grep.c -o search
> ./search pattern simple-grep.c
char line[MAXLINE], *pattern, *file_name;
file_name = argv[2]; line_numbers = 0; pattern = argv[1];
file_name = argv[3]; line_numbers = 1; pattern = argv[2];
if (strstr(line, pattern) != NULL){