2011-05-04 18 views
0

假設我有:如何將數字的char []轉換爲整數?

Operand[2][4] = {{"1", "2", "3", "4"},{"5", "6", "7", "8"}}; 

和我有一些所謂的Operand1_sign和Operand2_sign位變量(0:正,1:負)想他們是:

Operand1_sign = 0; 
Operand2_sign = 1; 

我怎麼能轉換成2本整數並對其施加一定的操作(如求和)

signed int Operand1, Operand2, Result; 

所以最後我可以得到以下幾點:

Operand1 = + 1234; 
Operand2 = - 5678; 
Result = Operand1 + Operand2; 
+2

int atoi(con​​st char * str)?,請參閱http://www.cplusplus.com/reference/clibrary/cstdlib/ atoi/ – 2011-05-04 02:37:34

+1

我沒有注意到你已經加入了'家庭作業'標籤。我錯過了什麼嗎? – 2011-05-04 02:40:18

+0

這只是PIC18上項目的一小部分 – 2011-05-04 02:41:44

回答

0

我可以建議是:

#include <stdio.h> 
#include <string.h> 

int my_atoi(char* operand, int bufsize, int sign) 
{ 
    char* value = new char[bufsize+1]; 
    memcpy(value, operand, bufsize); 
    value[bufsize] = '\0'; 
    int ret = 0; 
    sscanf(value, "%d", &ret); 
    if (sign < 0) 
    { 
     ret = -ret; 
    } 
    delete [] value; 
    return ret; 
} 

void main() 
{ 
    char Operand[2][4] = {{'1', '2', '3', '4'},{'5', '6', '7', '8'}}; 
    signed int Operand1 = my_atoi(Operand[0], 4, 1); 
    signed int Operand2 = my_atoi(Operand[1], 4, -1); 
    signed int Result = Operand1 + Operand2; 
} 

不過,我肯定會建議你得到的字符串作爲空終止字符串。在這種情況下,您可以跳過my_atoi的手動實現,只需執行以下操作:

#include <stdlib.h> 

void main() 
{ 
    char Operand[2][5] = {{'1', '2', '3', '4', '\0'},{'5', '6', '7', '8', '\0'}}; 
    signed int Operand1 = atoi(Operand[0]); 
    signed int Operand2 = -atoi(Operand[1]); 
    signed int Result = Operand1 + Operand2; 
} 
+0

是否有任何圖書館我應該導入得到這個工作? – 2011-05-04 03:16:57

1

沒有回答,我給你一個線索:1234也可以表示爲1 * 1000 + 2*100 + 3*10 + 4*1數量 - 這是關鍵,解析數:)

+0

但是,這種技術似乎只適用於固定長度數組。在我的項目中,每次我有不同的輸入時,數組都不會被修復(實際上它最多有13個)。 – 2011-05-04 02:54:23

+0

這對非固定長度的數組也適用 - 有點聰明 - 你說得對, t直接應用這個 – 2011-05-04 02:57:16

+0

@ Eng.Fouad你從來沒有提到操作數在你的問題中可能是可變的。 – joce 2011-05-04 03:03:24