繁体   English   中英

将字符串的值存储到char数组中

[英]Storing value of string into char array

我正在尝试创建Big Integer类,但是遇到了问题。 我有一个重载的构造函数,这给了我一些问题。 它应该接收一个字符串,并将该字符串转换为一个称为m_numberstd::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM