2011-05-04 41 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