|
发表于 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;
- }
复制代码 |
|