2012-07-10 45 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

相关问题