Как прочитать строку чисел в массив - PullRequest
0 голосов
/ 22 сентября 2011

Я работаю над заданием по программированию, в котором мы создаем наш собственный класс 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 ]

3 голосов
/ 22 сентября 2011

Вот подсказка:

Напишите отдельный цикл в начале, который пропускает все нули.

1 голос
/ 22 сентября 2011

Добавьте это непосредственно перед вашим циклом 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++];      
    }
}
0 голосов
/ 22 сентября 2011

Вам просто нужно добавить еще один цикл while перед тем, который у вас есть.

Но только некоторые другие подсказки:

Вы не можете изменить знак числа при любой цифре, знак зависит только от самого первого символа. Так что, если у вас есть строка типа -2345, все будет в порядке, но если у вас есть что-то другое, например: 234-88, тогда это должно быть недействительным, что вы будете делать с этим тогда?

Также массив digits на самом деле не должен быть равен size, а должен отбрасывать знак, если он существует, так как вы будете иметь дело с capacity?

Надеюсь, это полезно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...