C ++ char数组加法

时间:2018-10-14 10:02:47

标签: c++

所以我最近开始学习C ++,一直看很多教程,偶然发现了一个棘手的问题。我想输入一个最大数字n并输入存储在char数组中的两个数字。然后,我想将它们传递到我的add函数中以进行简单加法。它总是会返回一个字母。我知道它与char ASCII有关,但是除了使用字符串完成此操作以外,还有其他方法吗?

#include <iostream>
using namespace std;
void add(char m1[], char m2[], int n);

int main()
{
int n = 0;
cin >> n;

const char CAPACITY = 100;
char m1[CAPACITY] = {0};
char m2[CAPACITY] = {0};

for(int i = 0; i < n; i++)
{
    cin >> m1[i];

}
for(int i = 0; i < n; i++)
{
    cin >> m2[i];

}
add(m1, m2, n);


}

void add(char m1[], char m2[], int n)
{
char sum[100] = {0};
for(int i = 0; i < n; i++)
{
    sum[i] = m1[i] + m2[i];
}

for(int i = 0; i < n; i++)
    cout << sum[i];
}

1 个答案:

答案 0 :(得分:0)

了解'3'3之间的区别很重要。第一个是字符,一个符号。第二个是由一位数字组成的数字。不幸的是,在C ++中,初学者有时会感到困惑,因为字符有时看起来像是数字。它们可以隐式转换为整数,并且允许进行诸如求和它们的运算,尽管添加两个符号没有任何意义。当字符使用作为数字时,其数值是字符表示代码。即每个字符都有一个与之关联的代码(或数字),作为字符编码方案的一部分。 char最常用的字符编码方案是ASCII。

执行'3' + '0'时,实际上是在添加字符代码。如果查看ASCII表,您将看到'3'的代码为51,而'0'的代码为48,因此结果为99。由于'3' + '0'中发生隐式(隐藏)转换,结果(99)的类型为int,而不是char

更正式地说,'3' + '0'等效于:

static_cast<int>('3') + static_cast<int>('0')

当您将结果(记住结果是int)存储到char(就像您在sum[i] = m1[i] + m2[i]中所做的操作一样)时,该整数将隐式转换为char。您在ASCII表中看到代码99与字符'e'对应。

如果您将字符视为符号,它将很有帮助。有字母字符:'a''b'等;数字字符:'0''1'等;标点符号和空格字符:' '';''-'等以及控制字符:'\0'等。如果您将所有字符都放在同一位置会很有帮助船。如果您认为'a''3'都是两个符号,并且属于同一类型,则将很有帮助。然后,您会发现'3' + '0'的意义远不及'a' + 'b'的意义。

  

我,但是除了使用字符串来完成此操作之外,还有其他方法吗?

您的意思是将两个数字相加?当然可以:

int a, b;
std::cin >> a >> b;
int sum = a + b;
std::cout << sum << std::endl;

注意。吹了。