如何将字符数组转换为整数(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 数组中。将 coeff
和 expo
的类型更改为正确的类型。例如: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];
}
我 认为 您的教授希望您阅读文本,然后将该文本转换为数字。这是一个愚蠢的要求。
明智的程序会 >>
直接进入 int
s
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;
...因为它被认为是不好的做法。
我知道有比这更好的方法,但这只是我的想法。
该数组必须由用户输入,而不是在应用程序本身中指定。
char coeff[20];
char expo[20];
for (int i = 0; i < Size; i++) {
cin >> coeff[i];
cin >> expo[i];
}
当我在 cin >> coeff[i]
中输入一个数字时,它不允许我输入超过一位数字,有没有办法输入超过一位数字并仍然保存在变量中?
PS。我被迫在这里使用字符数组而不是整数
您正在将其存储在 char 数组中。将 coeff
和 expo
的类型更改为正确的类型。例如: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];
}
我 认为 您的教授希望您阅读文本,然后将该文本转换为数字。这是一个愚蠢的要求。
明智的程序会 >>
直接进入 int
s
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;
...因为它被认为是不好的做法。 我知道有比这更好的方法,但这只是我的想法。