Это домашняя работа, в которой я сталкиваюсь с проблемой, заданной строкой строки и которой нужно хранить в списке массива
Вот как я объявляю список массива
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);
}
Например, вы можете использовать обычный цикл.
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 } );