从命令行获取参数并将它们放在正则表达式语句中

时间:2017-01-25 17:17:27

标签: c

任务是 制作一个从文本文件中读取并写入其他文本文件的程序 仅在命令行参数中给出的符号 例如:
程序a-z in.txt out.txt
将文件out.txt只写入a-z范围内的字母 程序a-9 in.txt out.txt
将文件out.txt只写入a-z0-9范围内的字母 可以假设所有输入的数据都是正确的。

所以这是我的尝试:

 int main(int argc, char** argv)
 {
    FILE *fileIn, *fileOut;
    fileIn = fopen(argv[2] , "rb");
    fileOut = fopen(argv[3] , "wb");
    char *arguments = argv[1];

    printf("%d - %d\n", arguments[0], arguments[2]);
    char a;
    do 
    {
        a = fgetc(fileIn);
        if( a > arguments[0] && a < arguments[2])
            fputc(a, fileOut);  
    } while (a != EOF);

    fclose(fileIn);
    fclose(fileOut);
    return 0;
 }

我的第一个想法是采取args并将它们用作ascii限制器 它在某种程度上适用于a-z,但与其他它不相干 问题是:
我怎么能改善这个?
我应该改变这样做的方式吗?

2 个答案:

答案 0 :(得分:0)

如果您将a-9作为参数,则程序无法正常工作,因为数字字母('0''9')的ascii代码值都小于那些对于小写罗马字母('a''z')。

例如,'0'的值为0x30(&#39; 1&#39;为0x31,依此类推),&#39; a&#39;是0x61(&#39; b&#39;是0x62,依此类推),因此根本不会执行条件为(a >= 'a' && a <= '9')的if语句。

当被测试的字符等于if0时,argument[0]语句的条件表达式将评估为argument[2]。你可能想改变它。

答案 1 :(得分:0)

我会将您的if语句修改为以下内容:

if(arguments[2] >= '0' && arguments[2] <= '9') {
   if((a >= arguments[0] && a <= arguments[0]) || (a >= '0' && a <= arguments[2]))  
   {
      fputc(a, fileout);
   }
}
else if(arguments[2] >= 'a' && arguments[2] <= 'z' && arguments[0] >= 'a' && arguments[0] <= 'z') {
   if(a >= arguments[0] && a <= arguments[2]) {
      fputc(a, fileout);
   }
}