c++ - 将两个整数相乘时完全不相关的结果?
问题描述
#include <iostream>
using std::cout;
using std::endl;
int main(void) {
std::string fx = "6x^2+6x+4";
int part1 = fx[0] * fx[3];
cout << fx[0] << endl;
cout << fx[3] << endl;
cout << part1;
}
所以我有这个字符串,fx[0]
并且fx[3]
显然是整数:当我将它们打印到控制台时,它们打印出来就好了;但是,part1
(它们的乘法)等于一些完全不相关的数字?任何人都可以帮忙吗?
这是输出:
6
2
2700
解决方案
您的fx[0]
和fx[3]
变量是类型char
(在 C++中是整数类型)。但是,字符串的这两个元素中的实际值fx
将是数字的表示,6
而2
不是这些数字的数值。
很多时候,这些表示将是ASCII 代码(但这不是必需的);但是,需要的是0
数字的表示9
具有连续的连续值。因此,通过减去数字的值0
,我们可以转换为它们的数字表示。
在您的情况下,以下行将进行转换:
int part1 = (fx[0]-'0') * (fx[3]-'0');
fx[0]
您在打印时看到正确值的原因fx[3]
是因为接受参数的cout <<
运算符版本旨在打印表示的字符(而不是其“ASCII”代码);但是,类型的运算符(例如您的)将打印内部表示的实际值。(尝试更改其中一条线以查看差异。)char
cout <<
int
part1
cout << (int)fx[0] << endl;
PS不要忘记#include <string>
标题 - 一些实现在标题中隐含地<iostream>
这样做,但不要依赖它!
推荐阅读
- python - Xpath 和 CssSelector 不使用 Selenium 和 Python 提取数据
- gregorian-calendar - 我们如何才能匹配公历年的长度和热带年的长度?
- r - 如何使用 R DBI 创建视图?
- i2c - 为什么我不能在 ESP32 上的 Micropython v.1.13 中导入和使用 machine.SoftI2C?
- android - 如何找出Android手机中要与fstream一起使用的文件的完整目录?
- r - 使用模糊连接匹配最大 1 个字符不同的字符串
- django - Anisble django postgres 如何获取用户帐户或查看用户是否存在
- javascript - 多个下拉菜单,即使我单击另一个,也只有一个有效
- swift - 为什么下拉菜单中没有 UIViewAnimationsOptions 可用?
- c# - ASP.NET Core 中的 log4net 不会在更改时重新加载