2014-02-24 63 views
0

這是我遇到的問題功課內,定字符串的行,需要存儲到數組 獲得INT DAT從字符串迭代器,列表陣列

下面的列表是我如何申報清單陣列

list<terms> poly[100]; 

這裏是我的結構數據類型

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

考慮:

string line = "123456" 

我需要一次獲取前兩個字符並存儲到一個結構體(本例中的術語)數據類型 所以我將'1'保存爲標記,將'2'保存爲token2。另外我需要它們是int數據類型以供以後計算。將它們保存到新的條款,它將再次循環和閱讀「3」和「4」,轉換並重新保存等

我試過用字符串流轉換,但之後它給了我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名的列表,而不是數組列表的陣! – jrok

+0

oops ..然後這是我遇到的另一個問題..你能告訴我在這種情況下聲明從範圍[0-99]列表數組的正確格式是什麼? – lewis04

+0

*聳肩*我甚至不知道你想要什麼或需要什麼,對不起。聽起來像你想建立一個多項式列表。 'vector >',也許? ('節點'應該叫'Term',不是嗎?) – jrok

回答

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列表中? – lewis04

+0

@ lewis04我不明白你爲什麼將列表定義爲std :: list 你可以將它定義爲std :: list ,並且不需要分配堆中的每個節點。我在帖子中向您展示瞭如何填寫名單。 –