coding第6天1.4

指针数组的应用与命令行参数

以下的程序,有助于展示指针数组的操作与命令行参数的应用。
下面的函数,可选参数的查找,当-x时,表示打印与模式不匹配的行,当-n时候表示打印行号。并且可选参数能够组合。
打印所有与第一个参数指定的模式相匹配的行。

#include <stdio.h>
#include <string.h>

#define MAXSIZE 1000

int getline(char *s,int maxline);

int main(int argc,char *argv[])
{
	char line[MAXSIZE];
	long lineno=0;
	int c,except=0,number=0,found=0;

	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;
			}
		}
		if(argc!=1)
		{
			printf("Usage: find -x -n pattern\n");
		}
		else
		{
			while(getline(line,MAXSIZE)>0)
			{
				lineno++;
				if((strstr(line,*argv)!=NULL)!=except)
				{
					if(number)
					{
						printf("%ld:",lineno);
					}
					printf("%s",line);
					found++;
				}
			}
		}
		return found;
	}
}

(1)对各个参数进行解释,lineno,用于标记行号,用于行号的输出,except用于标记输出匹配串或者不匹配串-x,number用于标记是否输出行号。found用于统计输出了多少行,暂时用不上。
c是一个中间变量方便编程判定(这种思想经常用上)。
(2)–argc之后得到的argc的值表示未处理的命令行参数个数(不包括首个参数),(++argv)[0]用于寻找未处理行的首字符,++argv[0]用于寻找未处理行的第二个字符以及接下来的字符。
(3)while循环中的想法是这样的,当还有未处理的命令行参数并且参数首字符为‘-’的时候,
判定该命令行参数,接下来的所有字符(用一个while循环),如果为x,则表明输出不匹配项目,except标记为1,如果为n,表明输出行号,number标记为1;出错的命令行直接跳出循环,用argc=0,以及found=-1,标志输出命令出错。
(4)于是根据具体的情况,如果剩余处理的参数不等于1,也即不执行模式处理功能,于是输出提示。
(5)当输入正确的模式匹配命令时,得到行以及行号后,判定是否与模式匹配,(匹配,不匹配)。同时要判定是否输出,(匹配的输出,不匹配的输出)。所以此处if需要两个等式的判定,先判定是否模式匹配,然后在此基础上判定模式匹配的输出还是模式不匹配的输出,此处用了两个!=进行判定,值得学习。
(6)判定指针数组是指向哪个字符,先画出指针数组示意图,关键看哪个指针++;(++argv)[0]是argv这个一级指针++;所以表示的是第二行第一个字符,++argv[0],是argv[0]这个二级指针++;所指向的是第一行第二个字符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来根华子冷静下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值