用到了strstr(a,b)函数和getline()函数,strstr(a,b)函数看是否能在字符串a中找到字符串b,若找到返回指向,若没找到返回NULL
strstr实现可以看:Implement strStr()
grep -xn 模式 ==>就是找出没有该模式的行并打印。
代码:
#include <stdio.h> #include <string.h> #define MAXLINE 1000/*打印所有与第一个参数指定的模式相匹配的行*/ int main(int argc, char const *argv[]) {char line[MAXLINE];int c,found=0,except=0,number=0;int lineno=0;if(argc==1) return -1;while(--argc>0&& (*++argv)[0]=='-'){while(c=*++argv[0]){switch(c){case 'x':except=1;break;case 'n':number=1;break;default:printf("Find:illegal option %c\n",c);argc=0;found=-1;break;}}}while(found!=-1&&fgets(line,MAXLINE,stdin)>0){lineno++;if(except==1&&strstr(line,*argv)==NULL){if(number) printf("%d:",lineno);printf("%s",line);found++;}}return found; }