2013-09-24 84 views
0

我有以下情況下任何輸入字符串將轉換爲一個整數。C字符串轉換

Example: 
result = get_integer_from_string("100"); 
result == 100; // true 

如何,我可以寫不使用任何圖書館這樣的功能?我可以通過使用庫來完成它。

+0

你需要什麼是將字符串轉換爲沒有庫的整數?我是對的 – Scarface

+0

只需使用圖書館。這就是它的目的。 –

+1

我會遍歷字符串,將ascii字符轉換爲數字(使用ascii值'0'到'9'),然後將其添加到總數(乘以10,100等取決於位置)。 – nemasu

回答

7

按照下列步驟操作:

  1. 解析輸入字符串。
  2. 檢查字符是否是數字。
  3. 使用一些邏輯將字符格式的數字轉換爲整數格式。
  4. 另外,你可以在case的情況下實現Exception,輸入不是整數字符串。

我不能告訴你代碼,它不會幫助你學習,嘗試自己實現代碼,這很容易!

+1

+1,如果可以的話,我會加倍努力。 – Gorpik

2

循環遍歷字符串,從結尾到開頭。獲取每個數字,並將其轉換爲十進制值。將第一個(在後向循環中)乘以1並存儲結果。將第二個乘以10並添加到前一個的結果中。等等。

2

這是很容易出錯的條件,但如果字符串是有效的整數應該工作:

int str2int(const char* str) { 
    int result = 0; 
    char* p = str; 
    for (;;) { 
     char c = *p++; 
     if (c < '0' || c > '9') 
      break; 
     result *= 10; 
     result += c - '0'; 
    } 
    return result; 
} 

它的行爲接近atoi() - 在任何非數字停止處理,併爲空的輸入返回0。

+0

cc1plus:警告被視爲錯誤 在函數'int str2int(char *)'中: 第4行:警告:建議在作爲真值的賦值周圍使用括號...從鍵盤 – d3bug3r

+0

得到此錯誤。也改變邏輯停止處理任何非數字,就像'atoi()' – mvp

+0

檢查了這一點,似乎不工作... http://codepad.org/h00XnwoR – d3bug3r