使用argv []从命令行中提取数字集

时间:2012-12-20 02:57:37

标签: c

**如果您对解释我的推理的背景信息不感兴趣,请在问题结束时跳到最底层。

我有一组多项式方程式我需要读入我的程序来执行多项式的单位检验,例如

  • 综合分部
  • 加成
  • 减法
  • 缩放
  • 乘法
  • 罗茨

所以我需要能够输入大量的数字来测试BRLCAD中使用的功能,尽管我在提供有效的数字读取解决方案时遇到了麻烦。我目前的做法:

给出命令行:

./unit_test sd 2 3 4 8 1 4 5

  • sd - 执行合成分部
  • 2度的第一多边
  • 3,4,8 - 3x ^ 2 + 4x + 8
  • 1度第二聚
写一个算法以这种格式读取一组数字是很麻烦的,让其他人理解起来很困惑,而且我还没有实现另外两个多项式作为要比较的答案。(因为这是一个开源文件,我希望我的工作有一些透明度。)

if(strcmp(argv[1],"sd") == 0){

    poly_eqn1.dgr = atoi(argv[2]);
    /* start at argv[3], run degree count plus one times */
    for(counter = 0; counter < (eqn1.dgr + 1); counter++)
        poly_eqn1.cf[counter] = atof(argv[counter+3]);

    poly_eqn2.dgr = atoi(argv[4 + poly_eqn1.dgr]);
    /* start at end of degree one counter */
    for(counter = 0; counter < (dgr2 + 1); counter++)
        poly_eqn2.cf[counter] = atof(argv[counter+5+dgr]);

    /* grab the answer from end of data */

    return test_synthetic(//input proper data...);
}

在我的多项式中使用sscanf会更有效率,因为设置了最大度数吗?在编写初始方法之后我考虑使用sscanf,但我不确定是否使用以这种方式它是值得的,而不是从上面写两个多项式读取:

给定多项式的最大度数为4

./unit_test sd 2,0,0,2,4,5 1,0,0,0,2,3

  • 2,0,0,2,4,5 - degree 2,0x ^ 4 + 0x ^ 3 + 2x ^ 2 + 4x + 5

2 个答案:

答案 0 :(得分:5)

如果我是你,我会努力以人类可读的格式支持你的参数。

例如,应该可以按以下形式解析输入:

./unit_test "(3*x^2+4*x+8)/(4*x+5)"

当然,您可能必须编写词法解析器来理解这个输入,但从用户的角度来看它是最容易理解的。

答案 1 :(得分:3)

简单地处理命令行参数时,您真的不必担心效率。以最简单,最直接的方式完成您的任务。花时间担心效率问题 - 在实际数字运算算法的紧密循环中。