わかりました、これを説明するのは非常に難しいです。ここに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.
チャットの3行目にあるのでWhat's up
、この機能を使って戻ることができます。各行にはIDがあり、Idは行番号です。各行には、という名前のクラスへのポインタもあります。CItemElemは、アイテムに関するすべての情報を保持します。CString szText = GetTextAtLine(3);
What's up
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!
現在、行IDでアイテムを見つけることができるため、チャット文で一度に1つのアイテムしか返すことができません。私は過去数時間脳を乾杯してきました。同じ文IDで複数のアイテムを返すことができる方法を教えてください。
どうもありがとう!