选择长度为C的过滤器

时间:2015-01-19 13:16:17

标签: c filter

我正在编写一个过滤器,应该选择具有指定长度的所有行。我最终得到了这段代码,但我不知道如何指定n。我的意思是,n(以及可选的m)应该在命令提示符中被多行替换,但我不知道如何在代码中描述它。我想到了case "%d",但据我所知,不可能这样写。这是我到目前为止的代码:

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

int main(int argc, char *argv[])
{
    int n;
    int m;
    char line[200];
    while(fgets(line,sizeof(line)/sizeof(char), stdin)!=NULL)
        {
            if(argc>1){
        switch(argv[0][0])
        {
        case 'n':
        strlen(line)==n;
        break;

        case '#n':
        strlen(line)<n;
        break;

        case 'n m':
        strlen(line)>=n && strlen(line)<=m;
        break;

        case 'n#':
        strlen(line) > n;
        break;
    }
    printf("%s\n", line);
          }}
    return 0;
}

你的帮助对我意义重大!我不知道如何让它继续工作。

1 个答案:

答案 0 :(得分:0)

我认为你应该在你的循环之外解析命令行。假设您要求程序的调用者在命令行中指定nm,那么抓住前两个参数并将它们转换为整数就很简单了,然后循环你的标准输入。像这样:

/* call this minmax.c */
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
    int n, m, len;
    char line[200];

    if (argc < 3) {
        printf("Must specify min & max line length.");
        return -1;
        }

    n = atoi(argv[1]);
    m = atoi(argv[2]);

    while(fgets(line, 200, stdin) != NULL) {
        len = strlen(line);
        if (len >=n && len <= m)
            printf(line);
        }
    return 0;
    }

假设您正在运行* nix:

cc -ominmax minmax.c

然后用最小和最大线长度

调用它
./minmax 2 5

这将回显您键入的每行至少2个字符,但不超过5个字符。