C语言编程实现grep

欢迎转载,请注明出处,本文地址: http://blog.csdn.net/jk050802/article/details/8642790

联系邮箱:yinfork@foxmail.com 


简介

1.               字符串比较strncmp函数与strcmp函数不同的地方是参数里面是否有n。n代表比较的字符的个数。但是strncmp的功能只能从开头比较,没有grep的功能;

2.               对于接受的参数,如:argv[1], argv[2]。采用宏定义来的方法来区分参数之间不同的含义。如:#define KEY_PTR argv[1]   #defineFILE_PTR argv[2]  。

3.               在使用fopen函数后,记得在程序末尾使用fclose来关闭文件流。也可以使用atexit函数来登记退出的处理函数,来关闭文件流。

 

 

示例代码

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
#define MAX_BUFFER 200
#define KEY_PTR argv[1]
#define FILE_PTR argv[2]
 
int main(int argc,char *argv[])
{
         charbuffer[MAX_BUFFER];
         FILE*fp;
         intkey_sum = 0,res_sum = 0;
         char*buf_ptr = NULL;
         charconst *key_ptr = NULL;
 
         if(argc< 3){
                   printf("lackcommand\n");
                   exit(EXIT_FAILURE);
         }
         if(strlen(FILE_PTR)== 0) {
                   printf("filename error\n");
                   exit(EXIT_FAILURE);
         }
 
         fp= fopen(FILE_PTR,"r");
         if(!fp){
                   printf("openfile error\n");
                   exit(EXIT_FAILURE);
         }
         key_sum= strlen(KEY_PTR);
         printf("find:\n");
         while(fgets(buffer,sizeof(buffer),fp)!= 0){
/*
                   if(strncmp(buffer,KEY_PTR,key_sum)== 0)
                            printf("find%s\n",buffer);
*/
                   buf_ptr= buffer;
                   key_ptr= KEY_PTR;
                   while(*buf_ptr!= '\0'){
                            if((*buf_ptr== '\0')|(*key_ptr == '\0'))
                                     break;
                            if(*buf_ptr== *key_ptr){
                                     key_ptr++;
                                     if(*key_ptr== '\0'){
                                               printf("%s",buffer);
                                               res_sum++;
                                     }
                            }
                            elsekey_ptr = KEY_PTR;
                            buf_ptr++;
                   }
         }
         fclose(fp);
         printf("progress%d is found %d\n",getpid(),res_sum);
         exit(EXIT_SUCCESS);       
}


 

运行结果

[root@localhost grep]# ./y_grep incy_grep.c

find:

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

progress 10902 is found 3


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值