c++ - 完全不使用字符串将整数转换为数组(包括前导零)
问题描述
我正在创建游戏公牛和奶牛作为我的 C++ 课程的作业。我创建了将输入的整数存储到数组中的代码,但是我不知道如何存储前导零,这是分配中的一个测试用例。我不允许在这个作业中使用字符串。
例如,如果生成的代码是 0242,并且用户输入 0242,我得到的数组是 {2, 4, 2}
如果我们被允许使用字符串,这个赋值将是愚蠢的,但是,我们不允许使用字符串库中的任何东西。
#include <iostream>
using namespace std;
int main() {
//Get a guess from the user and store it in an array
cout << "Enter a " << num_digits << " digit code: ";
cin >> int_guess;
int guess_digits[5];
int new_guess[5];
int i = 0;
while (int_guess > 0)
{
guess_digits[i] = int_guess % 10;
int_guess /= 10;
i++;
}
for (int j = i - 1; j >= 0; j--)
{
new_guess[j] = guess_digits[j];
cout << new_guess[j];
}
}
解决方案
用户键入字符,而不是整数。
这就是为什么,这样的代码:
int int_guess;
cin >> int_guess;
一旦用户键入不是整数的内容,通常就会出现问题。
虽然您可能无法使用字符串库,但您可以自己轻松地将字符转换为数字。通过使用以下公式将数字转换为整数:
char c;
cin >> c;
int x = c - '0';
结果是“x”是输入字符的数值。
您的输入循环可能看起来像这样。
char c;
int guess_digits[5];
int index = 0;
while (index < num_digits)
{
std::cin >> c;
if (!std::cin)
{
break;
}
// convert character to integer manually
if ((c >= '0') && (c <= '9'))
{
guess_digits[index] = c - '0';
index++;
}
else
{
// invalid input - show an error
}
}
代码示例可能会将数字向后写入guess_digits 数组,但我会将这个错误留作练习,供您解决。
推荐阅读
- c++ - 在非常量上下文中使用 std::size
- java - 使用 Java 将多个图像转换为灰度
- python-3.x - 高效的二维列表初始化 [python]
- gitlab - 逃脱 ';' 在 Terraform GitLab 环境变量中
- c++ - 检查二叉树的函数是平衡的 C++
- node.js - nodejs收到错误TypeError:无法读取未定义的属性'then'
- python - lxml + django + uwsgi 无法生成正确格式的excel文件?
- html - 使 InputBox 中的部分文本在 Angular 7 中不可编辑
- node.js - Mongoose 错误:发布评论时出现 CastError
- javascript - 防止从 TinyMCE 内部触发拖动事件