求和两个字符串并在 C 中获取一个 int 值
Summing two strings and getting an int value in C
我想对两个字符串求和并得到一个 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;
做
a[i] - '0'.
此外,在第一个循环中,a
的长度大于 b
的长度,您将从 b
中读取不存在的值。然而,对于 a
,第二个循环中的情况类似。
sum += a[i-48]+b[j-48];
应该是
sum += (a[i]-48 +b[j]-48);
您还应该修复代码,因为您超出了较小 sring 的字符串长度,这可能会导致未定义的行为
改变
sum += a[i-48]+b[j-48];
至
sum += a[i] - '0' + b[j] - '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;
}
注意: 上面的代码假定字符串 a
和 b
中只有 数字 个字符,否则添加根据需要进行测试。
简短测试示例
int main (void) {
char *a = "123456789", *b = "1234567";
int sum = addoperator (a, b);
printf ("sum: %d\n", sum);
return 0;
}
例子Use/Output
$ ./bin/addchars
sum: 56
如果您还有其他问题,请告诉我。
我想对两个字符串求和并得到一个 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;
做
a[i] - '0'.
此外,在第一个循环中,a
的长度大于 b
的长度,您将从 b
中读取不存在的值。然而,对于 a
,第二个循环中的情况类似。
sum += a[i-48]+b[j-48];
应该是
sum += (a[i]-48 +b[j]-48);
您还应该修复代码,因为您超出了较小 sring 的字符串长度,这可能会导致未定义的行为
改变
sum += a[i-48]+b[j-48];
至
sum += a[i] - '0' + b[j] - '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;
}
注意: 上面的代码假定字符串 a
和 b
中只有 数字 个字符,否则添加根据需要进行测试。
简短测试示例
int main (void) {
char *a = "123456789", *b = "1234567";
int sum = addoperator (a, b);
printf ("sum: %d\n", sum);
return 0;
}
例子Use/Output
$ ./bin/addchars
sum: 56
如果您还有其他问题,请告诉我。