如何将数字字符串读入数组

时间:2011-09-22 02:45:36

标签: c++ arrays string

我正在编写一个编程任务,我们正在创建自己的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

3 个答案:

答案 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

希望这有用!