получить int dat от строкового итератора, в списке <struct> массива

0

Это домашняя работа, в которой я сталкиваюсь с проблемой, заданной строкой строки и которой нужно хранить в списке массива

Вот как я объявляю список массива

list<terms> poly[100];

И вот мой тип данных структуры

typedef struct Node*terms;
struct Node
{
    int expo;       //exponent
    int coef;       //coefficient
}

Данный:

string line = "123456"

Мне нужно получить первые два символа за раз и сохранить структуру (термины в этом случае) Тип данных, поэтому я сохраняю "1" в качестве токена и "2" в качестве токена2. Также мне нужно, чтобы они были типом данных int для последующего расчета. После сохранения их в новые термины он снова зациклится и прочитает "3" и "4", преобразует их и сохраняет снова и т.д.

Я пытался использовать stringstream для преобразования, но он дал мне invalid conversion from char' to const char*

for ( string::iterator it=line.begin(); it!=line.end(); it++){

    int token, token2;

    //change data type from string to int
    stringstream ss;
    ss<<*it;
    ss >>token;

    stringstream ss;
    ss<<*it+1;
    ss >>token2;

    //create a new struct for current line
    struct Node* p = (struct Node*) malloc(sizeof(struct Node));
    p->coef = token;
    p->expo = token2;
    poly[0].push_back(p);
}
  • 0
    Это массив из 100 списков, а не списков массивов!
  • 0
    Упс .. Тогда это еще одна проблема, с которой я сталкиваюсь .. не могли бы вы сказать мне, какой правильный формат для объявления массива списка из диапазона [0-99] в этом случае?
Показать ещё 4 комментария
Теги:
string
list
iterator
stringstream

1 ответ

0
Лучший ответ

Например, вы можете использовать обычный цикл.

std::pair<int, int> p;

for ( std::string::size_type i = 0; i < line.size(); i++ )
{
   if ( i & 1 == 0 )
   {
      p.first = line[i] - '0';
   }
   else
   {
      p.second = line[i] - '0';
      poly[0].push_back( new Node { p.first, p.second } );
   }
}

Только непонятно, почему вы определили список как std::list<Node *> вместо std::list<Node> Вы могли бы написать просто

      poly[0].push_back( { p.first, p.second } );
  • 0
    Спасибо за код! Но один вопрос, как определить список. Потому что мой тип списка - Node, и он имеет два разных элемента (в данном случае coef и expo). Как мне назначить p.first и p.second, соответствующие coef и expo в списке терминов?
  • 0
    @ lewis04 Я не понимаю, почему вы определили список как std :: list <Node *>, вы можете определить его как std :: list <Node>, и не будет необходимости выделять каждый узел в куче. Я показал вам в своем посте, как вы могли бы заполнить список.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню