|  | 
 
 发表于 2014-1-23 11:42:04
|
显示全部楼层 
| 注释版: 复制代码#include<stdio.h>
#include<stdlib.h>
/*打开文件,第二个参数是指针的指针,因为你要得到的是一个指向FILE结构体的指针
也就是说你要修改的是一个指针的值,所以传入指针的指针
*/
int openfile( char *filename , FILE **fp )
{
        *fp = fopen( filename , "r" );
        
        if( *fp ==NULL )
        {
                printf("open file failed!\n");
                return 1;
        }
        return 0;
}
//关闭文件,记得判断是否成功,这是个好习惯
void closefile( FILE *fp )
{
        if( fclose( fp ) == EOF )
        {
                printf("close file failed!\n");
                exit(1);
        }
}
//字符串比较函数,也就是标准库中的strstr()函数,src是源字符串,des是待比较的字符串,flag是
//是否忽略大小写的标志,1表示不忽略,0表示忽略
int mystrcmp( char *src , char *des , int flag )
{
        char *tmp;
        
        tmp = des;
        while( *src && *tmp )            //若src或者tmp到了末尾则结束比较,如果没找到的话一般是
        {                               //src到尾端,如果找到了一般是des到尾端
                //如果字符相同则tmp指针向前挪比较下一个字符,若不同tmp则从头开始,其实这里有个算法~
                if( *src == *tmp )
                {
                        tmp++;
                }
                else
                {
                        tmp = des;
                }
                src++;
        }
        //如果是tmp到了尾端则表示找到了,返回0,否则返回1
        if( !*tmp )
                return 0;
        else
                return 1;
}
void findstring( FILE *fp , char *str , int flag )
{
        int count = 0;
        char file_str[100];
        
        while( 1 )
        {
                count++;
                if( fgets( file_str , 100 , fp ) == NULL )
                {
                        printf("not find it!\n");
                        return;
                }
                else
                {
                        if( !mystrcmp( file_str , str , flag ) )
                        {
                                printf("line %d:%s\n", count , file_str);
                                return;
                        }
                }
        }
}
int main( int argc , char *argv[] )
{        
    FILE *fp;
        
        if( argc != 4 && argc != 3 )
        {
                printf( "wrong input!\n" );
                return 1;
        }
        else
        {
                if( !openfile( argv[ 2 ] , &fp ) )
                {
                        if( argc == 4 )
                        {
                                if( argv[1][1] == 'i' )
                                {
                                        findstring( fp , argv[3] , 1 );
                                        closefile( fp );
                                }
                                else
                                {
                                        printf( "%c wrong paras!\n",argv[1][1] );
                                        return 1;
                                }
                        }
                        else
                        {
                                findstring( fp , argv[3] , 0 );
                                closefile( fp );
                        }
                }
        }
        
        return 1;
}
 | 
 |