首页 > 解决方案 > 完全不使用字符串将整数转换为数组(包括前导零)

问题描述

我正在创建游戏公牛和奶牛作为我的 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];
  }
} 

标签: c++

解决方案


用户键入字符而不是整数

这就是为什么,这样的代码:

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 数组,但我会将这个错误留作练习,供您解决。


推荐阅读