对两个字符串求和并得到 C 中的 int 值



我想对两个字符串求和并得到一个 int 值作为结果。为什么我不能简单地减去 48 将字符转换为 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;

do

a[i] - '0'.

此外,在第一个循环中,a 的长度大于 b 的长度,您将从不存在的b中读取值。然而,对于a来说,第二循环中的类似情况。

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

应该是

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

您还应该修复代码,因为您将超出较小环的字符串长度,这可能会导致未定义的行为

更改

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

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

如果我知道您想对字符串 a字符串 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: %dn", sum);
    return 0;
}

示例使用/输出

$ ./bin/addchars
sum: 56

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

最新更新