【问题标题】:Summing two strings and getting an int value in C在 C 中对两个字符串求和并获得一个 int 值
【发布时间】:2017-05-25 05:44:36
【问题描述】:

我想对两个字符串求和并得到一个 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;

【问题讨论】:

  • 您正在从索引中减去 do a[i] - 48
  • 或者干脆while (*a &amp;&amp; *b) { sum += *a - '0' + *b - '0'; a++, b++; }(假设字符串ab只包含数字,否则需要添加检查确认)

标签: c string ascii addition


【解决方案1】:

a[i] - '0'.

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

【讨论】:

  • 我明白了,你是对的。在这种情况下,我最好将字符串作为值,然后将其转换为 int。
【解决方案2】:
sum += a[i-48]+b[j-48]; 

应该是

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

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

【讨论】:

    【解决方案3】:

    改变

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

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

    【讨论】:

    • 不是a[48]
    • a[48] - '0' 更改为 a[i] - '0'
    【解决方案4】:

    如果我知道你想为每个包含数字的索引对 string astring 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
    

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

    【讨论】:

      猜你喜欢
      • 2021-05-10
      • 1970-01-01
      • 2013-02-05
      • 2011-03-25
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      相关资源
      最近更新 更多