可选的查找模式

#include <stdio.h>
#include <string.h>
#define MAXLINE 1000
int getline(char *line,int max);
int main(int argc,int *argv[]){
	int c;
	int lineno=0;
	int number=0;
	int except=0;
	while(--argc&&(*++argv)[0]=='-'){
		switch (c=*++argv[0]){
			case n:
				number=1;
				break;
			case x;
				except=1;
				break;
			default:
				printf("find:illegal option %c\n");
				argc=0;
				found=-1;
				break;
		}
	}
	if(argc!=1){
		printf("Usage:find -x -n pattern\n"); 
	}else{
		while(getline(line,MAXLINE)>0){
			lineno++;
			if(strstr((line,*argv)!=NULL)!=except){
				if(number){
					printf("%d",lineno);
				}
				printf("%s",line);
				found++;
			}
		}
	}
	return found;
} 
#include <stdio.h>
#include <string.h>
#define MAXLINE 1000   //宏定义 AMXLINE值为1000

int getline(char *s,int lim)   //自定义函数getline,形参为char *s,int lim
{
	int i,c;
	for(i=0;i<lim-1&&(c=getchar())!=EOF&&c!='\n';++i)  //读取字符,判断是否超长或结束
		*s++=c;     // 这句的意思相当于*s=c ; s++;
	if(c=='\n')              // 判断c是否是换行符
	{
		*s=c;     //写入换行符
		++i;       // i自增
	}
	*s='\0';          //写入结束符
	return i;        //返回i,也就是读入字符的个数。
}

main(int argc,char *argv[])    //主函数,带有形参是指在系统或其他程序调用该程序时的调用值
{
	char line[MAXLINE];      //定义字符数组,相当于line[1000]
	long lineno=0;        //定义长整型变量
	int c,except=0,number=0,found=0;  

	while(--argc>0&&(*++argv)[0]=='-')    //当argc-1>0及++argv[0]=="-"时执行,argv[]是指针数组。用二维数组来表示的话++argv[0]相当于argv[1][0],且每次执行都增加。
		while(c=*++argv[0])   //把argv[2][0]的值赋给c。同上
			switch (c)   //switch语句,根据c值选择性执行语句。
		{
			case 'x':   //当c==x时
				except=1;
				break;
			case 'n': //当c==n时
				number=1;
				break;
			default:  //当上面无对应值时
				printf("find:illegal option %c\n",c);
				argc=0;
				found=-1;
				break;
		}
		if(argc!=1)  //如果argc不等于1 则执行下面语句
			printf("Usage:find -x -n pattern\n");   //输出
		else     //如果argc等于1 就执行下面语句
			while(getline(line,MAXLINE)>0) //如果执行getline函数返回值>0
			{
				lineno++;      // lineno=lineno+1
				if((strstr(line,*argv)!=NULL)!=except) //*argv是否存在于line中,且不等于except
				{
					if(number)
						printf("%ld:",lineno);
					printf("%s",line);
					found++;
				}
			}
			return found;  //返回found值,返回给系统或调用者
}


if (argc != 1)printf("Usage: find -x -n pattern\n"); 这句是说如果这时候剩下的参数不是1个的话,就打印一个关于用法的提示

if ((strstr(line, *argv) != NULL) != except) 这句, 当 except ==1的时候这句相当于   if ( strstr(line, *argv) == NULL) 
当except ==0 的时候这句相当于  if (strstr(line, *argv) != NULL) 而前面代码里如果找到x参数就设置 except=1  就是这么联系起来的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值