C++ 将字符串的值存储到char数组中
我试图创建一个大整数类,但遇到了一个问题。我有一个重载构造函数,它给了我一些问题。它应该接收一个字符串并将该字符串转换为一个名为C++ 将字符串的值存储到char数组中,c++,arrays,string,uint8t,C++,Arrays,String,Uint8t,我试图创建一个大整数类,但遇到了一个问题。我有一个重载构造函数,它给了我一些问题。它应该接收一个字符串并将该字符串转换为一个名为m\u number的std::uint8\u t*,跟踪位数,并跟踪为每个std::uint8\u t*分配的空间。数字向后加载,最低有效位为m\u编号[0]。我遇到的问题是将“0”存储到数组中。该函数对于任何其他值都可以正常工作,但如果字符串中有“0”,则该函数将停止将值存储到std::uint\u 8*中。 以下是我的类定义: class BigInt
m\u number
的std::uint8\u t*
,跟踪位数,并跟踪为每个std::uint8\u t*
分配的空间。数字向后加载,最低有效位为m\u编号[0]
。我遇到的问题是将“0”存储到数组中。该函数对于任何其他值都可以正常工作,但如果字符串中有“0”,则该函数将停止将值存储到std::uint\u 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;
}
biginger::biginger(std::string str){
m_digitCount=str.length();
m_sizeReserved=m_digitCount;
m_编号=新标准::uint8_t[m_尺寸服务];
std::uint8_t*aArray=新std::uint8_t[m_sizeReserved];
int j=str.length()-1;
对于(int i=0;i
问题在于uint8\u t被视为无符号字符。
因此,如果您通过cout传递它,它会将您的0解释为ASCII的索引,即“\0”并停止。
因此,您必须确保cout不会将整数信息解释为字符信息
有关解决方案和更多信息,请参见此:
请提供一份详细的报告。顺便说一句,您有两个
new
,但只有一个delete
闻起来像内存泄漏“函数停止存储值”您确定吗?在我看来,当读取字符串而不是存储它时,会出现问题。您可以使用std::vector
来保持大小,而不是读取nul并假设它将以字符串大小终止。使用std::vector
可以简化操作。总体思路似乎很合理。我想您也可以等到读取字符串后再转换,即,aArray[I]=str[j]-'0'代码>->aArray[i]=str[j]
&然后类似于(int i=0;m_number[i]!=0;++i)std::cout的问题并不是由std::cout引起的,因为我从未实际输出值,存储值是个问题如果不使用任何输出,您如何知道有问题?在哪一行代码中可以检测到它没有存储值?