通过命令行参数,打印文件中有特定字符的行--原题C prime plus,第13章-复习题5

除去程序名本身,要求输入两个参数,分别为需要判定的字符,以及文件名。

思路:

1. 文件内容逐一判定,确定是否有该字符;

2.将文件字符串赋给一个字符串数组;

3.通过strrchr()函数,或类似函数,通过返回值判定字符串是否有该字符。 ( 第一条可以与此条合并执行,以下代码按3条思路进行)

 

存在的疑惑:exit()中的参数1或者0?

如果文件中,不存在此字符,那么参数是1(正常关闭)还是应该为0(异常关闭)呢?

如果有哪位大佬看到,能否帮助解答下我的疑惑。谢谢。

 

下面为程序,如有问题,请帮助指出

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

# define SIZE 50
# define LIM 100

int main(int argc, char* argv[])
{
    FILE* fp;
    bool infile = false;
    char ch;
    char aim = argv[1][0];   //需要判定的目标字符,注意命令行参数是以字符串形式存储
    char arr[SIZE][LIM];     
    
    if(argc<3)              //参数不足
    {
        printf("The argument must over %d",argc-1);
    }
    if ((fp = fopen(argv[2], "r")) == NULL)   //打开文件失败
    {
        fprintf(stderr, "Can't open %s -filename", argv[2]);
        exit(EXIT_FAILURE);
    }
//全文件判定是否存在此字符 while ((ch = getc(fp)) != EOF ) { if (ch == aim) { infile = true; break; } else continue; } if (infile == false) { printf("No character %c in the file",aim); //如果不存在,直接关闭程序 exit(1); //1 还是 0 ??? } else rewind(fp); //回到文件指针初始位置
// 将文件中字符串赋给二维字符串数组 int i = 0; int j = 0; while ((ch = getc(fp))!= EOF) { if(ch == '\n') ch = '\0'; arr[i][j++]=ch; if(ch == '\0') { j = 0; i++; } }
//打印存在该字符的字符串 for(int k = 0;k<i;k++) { if((strrchr(arr[k],aim))!=NULL) puts(arr[k]); } fclose(fp); return 0; }

 

上一篇:算法竞赛—欧拉筛素数(线性筛)


下一篇:埃氏筛&欧拉筛~Biu~素数