所以我最近开始学习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];
}
答案 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;
注意。吹了。