2012-12-20 47 views
5

從命令行拉數字集**如果您對解釋我的推理的背景信息不感興趣,請跳到我的問題結尾的底部。從argv []

我有一組多項式方程我需要閱讀到我的程序來執行多項式如

  • 合成師
  • 加成
  • 的單元測試減法
  • 規模
  • 乘法
  • 根部

所以我需要能夠輸入一個廣泛的數字來測試BRLCAD中使用的函數,雖然我有麻煩提出一個有效的解決方案來讀取數字。我目前的做法:

鑑於命令行:

./unit_test sd 2 3 4 8 1 4 5

  • SD - 執行綜合除法
  • 2 - 第一聚度
  • 3,4,8 - 3×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,但我不確定以這種方式使用它是否值得,而不是從上面寫入兩個多項式讀入:

鑑於最大程度是四爲多項式

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

  • 2,0,0,2,4,5 - 等級2,0X^4 + 0X^3 + 2×^ 2 + 4X + 5
+0

我不明白你現在這樣做的方式有什麼問題。 –

+0

@jim balter:這是非常混亂和難以實現,我問是否使用sscanf將是一個更好的選擇切換到。 –

+0

scanf在這裏不會爲你做任何事情。您認爲(如果您閱讀帖子)有 –

回答

3

簡單地說,你真的不需要擔心效率問題處理命令行參數。以最簡單,最直接的方式完成適合您任務的方式。花時間擔心它的重要性 - 與實際的數字運算算法緊密結合。

+0

,您認爲哪種獲取數字的方法更容易?欣賞答案。 –

5

如果我是你,我會努力以可讀的格式支持你的參數。

例如,它應該有可能在以下表格解析輸入:

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

當然,你可能必須編寫詞法分析器理解這個輸入,但它是最容易從用戶的角度來理解。

+0

這是一個好主意,但是我爲此編寫的文件是一個開源項目(BRLCAD),可能不支持這種方法。項目中的所有其他單元測試都非常簡單,可以將參數傳遞到(複數/實數單元測試)中,除了我期望用c概念編寫的多項式。但仍然upvoted –