如何将字符数组转换为整数(2 位或更多位数字)

How can I convert an array of characters to an integer (for 2 or more digits)

该数组必须由用户输入,而不是在应用程序本身中指定。

char coeff[20];
char expo[20];
for (int i = 0; i < Size; i++) {
    cin >> coeff[i];
    cin >> expo[i];
}

当我在 cin >> coeff[i] 中输入一个数字时,它不允许我输入超过一位数字,有没有办法输入超过一位数字并仍然保存在变量中?

PS。我被迫在这里使用字符数组而不是整数

您正在将其存储在 char 数组中。将 coeffexpo 的类型更改为正确的类型。例如:int coeff[20] 如果您希望存储 20 个整数。

这在技术上是可行的,但有限制。在 C++ 中,char 大小通常为 1 个字节(检查第一条评论),而 int 大小为 4 个字节,因此可以存储在 char 中的最大值是最大值 255(检查第一条评论)因为 255 是只能用一个字节表示的最大数字。

所以在 for 循环中你可以使用一个新的 int 变量来存储用户输入,然后将字节存储在 char 变量中。 当试图获取存储的整数时,将其转换为 int,如:

char coeff[20]; 
char expo[20]; 
for (int i = 0; i < Size; i++) { 
    int x = 0;
    cin>>x;
    coeff[i] = (char) x;
    cout<<(int) coeff[0];
}

认为 您的教授希望您阅读文本,然后将该文本转换为数字。这是一个愚蠢的要求。

明智的程序会 >> 直接进入 ints

int coeff;
int expo;
std::cin >> coeff >> expo;

要将其安全地读入中间文本,您可以

std::string coeff_s;
std::string expo_s;
std::cin >> coeff_s >> expo_s;
int coeff = std::stoi(coeff_s);
int expo = std::stoi(expo_s);

不过我预测你的教授会坚持使用原始 char[] 而不是 std::string。你必须更加小心(在 C++20 之前),指定 char[].

的长度
char coeff_s[20];
char expo_s[20];
std::cin >> std::setw(20) >> coeff_s >> std::setw(20) >> expo_s;
int coeff = std::atoi(coeff_s);
int expo = std::atoi(expo_s);

我建议直接使用 int 变量而不是 char 数组。但是由于您必须为作业做这件事,所以我找到了一种将数据输入到 char 数组的方法:

istream& operator>> (istream& is, char char_array[INT_MAX]) // INT_MAX means the maximum value for an int
{
    std::string s; is >> s;

    if (s.size() > 20) s = s.substr(0, 20);

    for (int i = 0; i < s.size(); i++)
    {
        char_array[i] = s[i];
    }
    return is;
}

这里我重载运算符 >> 以处理大小为 INT_MAX 的字符数组。

然后在你的主函数中,你可以简单地说:

int main()
{
    char char_array[20]{};

    std::cin >> char_array;

    for (int i = 0; i < sizeof(char_array); i++)
    {
        std::cout << char_array[i];
    }
}

就这么简单。另外根据您提交的代码,请不要执行以下操作:

using namespace std;

...因为它被认为是不好的做法。 我知道有比这更好的方法,但这只是我的想法。