2012-07-10 46 views
1

好吧,這是非常難以解釋。我試圖在這裏寫一個100行解釋,看到我失敗後我試圖創建一個圖像,以更好地解釋它也失敗了http://img208.imageshack.us/img208/7383/48821020.png找到一個字符串的多個類指針

這似乎是不可能的,因爲它的複雜性非常高。在最原始的是,我需要爲字符串的每個部分分配Id。目前,我可以給ID的一個字符串,例如:

He: hey 
She: Hi 
He: What's up 
She: Not much, you? 
He: I'm fine, i'm selling a <Scale Armor> wanna buy it? 
She: Next time maybe. 

我可以用CString szText = GetTextAtLine(3);因爲What's up位於聊天的第三行函數返回What's up。每行都有一個Id,Id是行號。每行還有一個指向名爲CItemElem的類的指針。 CItemElem包含有關項目的所有信息。

I通過使用以下函數CItemElem *pItem = GetItemAtLineId(5)找到指針,它將返回存儲在map<unsigned int,CItemElem*>mItemChat處的指針,其中unsigned int是行標識符。每當有人在聊天中聊天時,如果在聊天中輸入了一個項目,則會將新元素插入到STL貼圖中,並將其添加到行ID中。

CItemElem* CEditString::GetItemAtLineId(unsigned long uLine) 
{ 

    for(map<unsigned int,CItemElem*>::iterator it = m_mItemChat.begin(); it != m_mItemChat.end(); ++it) 
    { 
     if(uLine == it->first) 
      return(it->second); 
    } 

    return NULL; 
} 

因此,大家可以看到,我可以找到一個CItemElem指針由行標識,但現在我的問題是我需要在字符串來定位多個項目,因爲3項最多可以在輸入的句子時間:

He: Hey guys i'm selling <Scale Boots> <Wooden Sword> <Water Helmet> cool items! 

目前我一次只能在一個聊天句子中返回1個項目,因爲我可以通過行ID找到該項目。在過去的幾個小時裏我一直在烘烤我的大腦,請賜教我如何能夠在相同的句子ID返回多個項目。

非常感謝!

+0

回報項目的載體使用CLineElem*? – nhahtdh 2012-07-10 03:01:17

+1

這是可能的。我不完全確定,但'map >'可能是您需要的。 – nhahtdh 2012-07-10 03:06:05

+1

它必須更具體,因爲當用戶將鼠標懸停在字符串的一部分上時,它必須顯示項目信息(保存在CItemElem *處)。可以用一種方式存儲多個項目,問題是找到鼠標懸停的項目是什麼 – 2012-07-10 03:06:30

回答

1

由於意見建議,使用CItemElem*向量作爲地圖的價值,或者寫另一個類,包裝它更多的可讀性也正在考慮添加任何其他類型的比CItemElem的未來需要。此外,如果字符串位置是查找該項目所需的鍵,則可以使用map而不是vector。將跨越項目的每個字符串位置設置爲指向該特定項目的指針,以便在具有鼠標移過的字符串位置時輕鬆檢索該位置。

class CLineElem 
{ 

public: 
void AddItemElem(CItemElem* pElem_i, int nStrPos_i); 
CItemElem* GetItemElemAt(int nStrPos_i); 
void RemoveAllItemElems(); 

private: 
    map<unsigned int, CItemElem*> m_Elems; 
}; 

然後在地圖m_mItemChat,而不是CItemElem*

+1

謝謝大家的想法!你已經讓我明白瞭如何在字符串中存儲多個項目,並幫助我找出現在我只需要計算鼠標結束的部分。通過渲染函數檢測鼠標懸停,我將計算x和y鼠標位置以及''位置和行ID,然後檢索矢量中表示的一個「CItemElem *」。從現在開始,我只需要減輕壓力!謝謝! – 2012-07-10 04:26:14

相關問題