在字符串处找到多个类指针

时间:2012-07-10 02:56:53

标签: c++

好的,这很难解释。我试着在这里写一个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.

我可以使用What's up函数返回CString szText = GetTextAtLine(3);,因为What's up位于聊天的第三行。每行都有一个Id,Id是行号。每行还有一个指向名为CItemElem的类的指针。 CItemElem保存有关项目的所有信息。

我使用以下函数CItemElem *pItem = GetItemAtLineId(5)找到指针,它将返回存储在map<unsigned int,CItemElem*>mItemChat的指针,其中unsigned int是行整齐。每当有人在聊天中说话时如果在聊天中输入了一个项目,则新元素将以其行ID插入到STL地图中。

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;
}

因为你可以看到我可以通过行Id找到一个CItemElem指针,但现在我的问题是我需要在字符串中找到多个项目,因为最多可以在一个句子中输入3个项目时间:

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

目前,我一次只能在聊天句中返回1个项目,因为我可以通过行ID找到该项目。过去几个小时我一直在为我的大脑喝酒,请告诉我如何能够在同一句话中返回多个项目。

非常感谢!

1 个答案:

答案 0 :(得分: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;
};

然后在地图CLineElem*中使用m_mItemChat而不是CItemElem*