2013-09-27 28 views
1

嗨,有人能指出我這個代碼有什麼問題嗎?C++整理負輸出

#include <stdio.h> 
int convstrg(char* str) { 
    int output = 0; 
    char* p = str; 
    for (int i=0;str[i]!='\0';i++) { 
     char c = *p++; 
     if (c < '0' || c > '9') 
     continue; 
     output *= 10; 
     output += c - '0'; 
    } 
    return output; 
} 

int main(){ 
    char x[] = "1xx23"; 
    printf("%d\n", convstrg(x)); 
    return 0; 
} 

當輸出爲字符串整數時,代碼應該返回一個整數。但似乎我越來越怪異號碼,如0

這是一些測試情況下,它的一些工作,一些沒有

"123" -> 123 
"23xyz" -> 23 
"" -> 0 
"abc" -> 0 
"-1" -> -1 

感謝

編輯

好了,現在我有點所有的情況下預計負字符串..

+0

@icabod問題是負數爲「-1」我得到1的回報 – d3bug3r

+1

你必須處理負值沒有邏輯 - 你需要補充一點。但是,既然這是C++,那麼爲什麼當有更好的替代品不需要編碼時,你甚至會重新發明這種輪子(並使用C-stye編碼)? –

+0

@novavent:是的,只是看到它不會爲負面工作,所以刪除了我的評論:) – icabod

回答

2
  • 你永遠不會檢查,看是否主字符是-因此你不能指望有正確解析的負數。
  • 您應該中斷if (c < '0' || c > '9')而不是繼續。否則從12xyz123解析的值將會很奇怪。
  • 我希望你知道有內置的函數來解析字符串中的整數,例如使用std::atoi或使用std::stringstream。有關更多詳細信息,請看here
  • 您也可以使用第三方庫像boost::lexical_cast像這樣boost::lexical_cast<int>(x)
+0

我想要沒有使用構建函數 – d3bug3r

+0

@novavent這就是爲什麼我也添加了錯誤,我發現你的代碼。在答案中提供所有選項仍然很好,因爲您的問題從未聲明要在不使用內置函數的情況下執行。 –

+0

「12xyz123」這種情況下實際返回一個正確的答案,看看這裏http://codepad.org/41KhzOrP – d3bug3r