我正在编写一个编程任务,我们正在创建自己的BigNum类。需要设置其中一个构造函数,以便它可以从字符串中取一个数字(即342567)并将其读入数组。但是,如果数字是0000000342567,则必须能够跳过0并且只读取342567.
到目前为止我在哪里但在修剪0s时迷失了
BigNum::BigNum(const char strin[])
{
size_t size = strlen(strin);
positive = true;
capacity = size;
digits = new size_t[capacity];
used=0;
while(used<size)
{
if(strin[size - used -1] =='-')
{
positive = false;
size --;
}
else if(strin[size - used -1] =='+')
{
size --;
}
else
{
digits[used] = strin[size - used -1] - '0';
used++;
}
}
}
如果有帮助,这是作业说明 http://csel.cs.colorado.edu/%7Eekwhite/CSCI2270Fall2011/hw2/Homework2.pdf
答案 0 :(得分:3)
这是一个提示:
在开头写一个单独的循环,跳过所有零。
答案 1 :(得分:1)
在你的while循环之前添加它:
for (int i=0; i < size; i++)
{
if (strin[i] >= '1' && strin[i] <= '9')
{
used = i;
break;
}
}
这样,你的while循环开始只从数字实际开始的索引读取字符串,跳过所有前导0。
这也应该处理前导符号:
BigNum::BigNum(const char strin[])
{
size_t size = strlen(strin);
positive = true;
used=0;
if (strin[0] == '+' || strin[0] == '-')
{
//set positive or negative
used++;
}
while (used < size)
{
if (strin[used] != '0')
break;
used++; //used will only increment if above if condition failed.
}
int digitIndex = 0;
digits = new size_t[size-used]; //create digits array here so it isn't larger than needed
while(used<size)
{
digits[digitIndex++] = strin[used++];
}
}
答案 2 :(得分:0)
您只需在您拥有的循环之前添加另一个while
循环。
但只是其他一些提示:
您无法更改任何数字的数字符号,该符号仅取决于第一个字符。所以,如果你有一个像-2345
这样的字符串,那就没关系了,但是如果你有其他类似的东西:234-88
那么这应该是无效的,你会怎么做呢?
digits
数组也不应该等于size
,而应该删除符号数字(如果确实存在),那么你将如何处理capacity
?
希望这有用!