/** @autho: yj
* @function: like gerp command in linux: find lines with a specified string in a file, and print these lines.
* @usage: ./grep [string] [filename]
**/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100
int strindex(char s[], char t[]);
int main(int argc, char *argv[])
{
int i;
char c;
FILE *fp;
int found = 0;
char str[MAX]; // keep a line read from a file
if(argc < 3) {
fprintf(stderr, "Not enough arguments
");
exit(-1);
}
if((fp = fopen(argv[2], "r")) == NULL) {
fprintf(stderr, "File open failed
");
exit(-1);
}
/*read one line from a file*/
while(!feof(fp)) {
for(i=0; i<MAX-1 && (c = fgetc(fp)) != EOF && c != '
'; i++)
{
str[i] = c;
}
if(c == '
')
str[i++] = '
';
str[i] = '\0';
//if(c == EOF)
// break;
if(strindex(str, argv[1]) >= 0) {
printf("%s", str);
found++;
}
}
printf("total lines: %d
", found);
return found;
}
/*find position of string t[], and return position; if not exist, return -1 */
int strindex(char s[], char t[])
{
int i, j, k;
for(i=0; s[i] != '\0'; i++) {
for(j=i, k=0; t[k]!='\0' && s[j]==t[k]; j++, k++)
;
if(k > 0 && t[k] == '\0') //t[k] = '\0' means completely similar
return i;
}
return -1;
}