[英]Storing value of string into char array
我正在尝试创建Big Integer类,但是遇到了问题。 我有一个重载的构造函数,这给了我一些问题。 它应该接收一个字符串,并将该字符串转换为一个称为m_number
的std::uint8_t*
,跟踪位数,并跟踪为每个std::uint8_t*
分配的空间。 这些数字是反向加载的,最低有效位是m_number[0]
。 我遇到的问题是将'0'存储到数组中。 该函数对于任何其他值都可以正常工作,但是如果字符串中包含'0',该函数将停止将值存储到std::uint_8*
。 这是我的班级定义:
class BigInteger
{
public:
BigInteger add(const BigInteger& rhs);
BigInteger multiply(const BigInteger& rhs);
void display();
BigInteger();
BigInteger(const BigInteger& rOther);
BigInteger(int);
BigInteger(std::string);
BigInteger& operator=(const BigInteger & rhs);
private:
std::uint8_t* m_number;
unsigned int m_sizeReserved;
unsigned int m_digitCount;
}
这是我的重载构造函数:
BigInteger::BigInteger(std::string str) {
m_digitCount = str.length();
m_sizeReserved = m_digitCount;
m_number = new std::uint8_t[m_sizeReserved];
std::uint8_t* aArray = new std::uint8_t[m_sizeReserved];
int j = str.length()-1;
for(int i=0; i < m_digitCount; i++, j--) {
aArray[i] = str[j]-'0';
}
for(int i=0; i < m_digitCount; i++) {
m_number[i] = aArray[i];
}
delete[] aArray;
}
问题在于uint8_t被视为无符号字符。
因此,如果通过cout传递它,它将把您的0解释为ASCII的索引,即'\\ 0'并停止。 因此,您必须确保cout不会将整数信息解释为字符信息。
请参阅此以获取解决方案和更多信息: uint8_t无法用cout打印
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.