求和两个字符串并在C

时间:2017-05-25 05:44:37

标签: c string ascii addition

我想将两个字符串相加并获得一个int值作为结果。 为什么我不能简单地减去48将char转换为int值?

int AddOperator(char *a, char *b){

int sum = 0;
char i, j;
    if (strlen(a) >= strlen(b)){
        for(i=0, j=0; i < strlen(a); i++, j++)  
            sum += a[i-48]+b[j-48]; 
    }
    else if (strlen(b) > strlen(a)){
        for(i=0, j=0; i < strlen(b); i++, j++)  
            sum += a[i-48]+b[j-48]; 
    }
return sum;

4 个答案:

答案 0 :(得分:2)

待办事项

a[i] - '0'.

此外,在第一个循环中,a的长度超过b的长度,您将从b读取不存在的值。但是对于a,第二循环中的类似情况。

答案 1 :(得分:1)

sum += a[i-48]+b[j-48]; 

应该是

sum += (a[i]-48 +b[j]-48); 

你应该修复代码,因为你要超越较小的sring的字符串长度,这可能导致未定义的行为

答案 2 :(得分:0)

变化

sum += a[i-48]+b[j-48]; 

sum += a[i] - '0' + b[j] - '0'; 

答案 3 :(得分:0)

如果我理解你想要为每个包含数字的索引在 string a string b 中对每个相应的字符求和,那么你可以用指针非常简单地完成所有公共索引的算术:

int addoperator (char *a, char *b)
{
    int sum = 0;

    while (*a && *b) {               /* so long as each contains digits */
        sum += *a - '0' + *b - '0';  /* sum the digits */
        a++, b++;                    /* increment pointers */
    }

    return sum;
}

注意:上面的代码只假设字符串ab中的数字字符,否则会根据需要添加测试。

简短测试示例

int main (void) {

    char *a = "123456789", *b = "1234567";
    int sum = addoperator (a, b);

    printf ("sum: %d\n", sum);

    return 0;
}

示例使用/输出

$ ./bin/addchars
sum: 56

如果您有任何其他问题,请告诉我们。