3

メッセージのリストがあり、メッセージを追加するたびにタイムスタンプを設定します。文字列にも一致する、特定の期間内に追加されたメッセージを返す関数を作成しようとしています。しかし、私は今立ち往生しています、どんな助けでも大歓迎です、以下は私のコードです:

struct BarMessage
{
    int Length;
    const char *message;
    time_t TimeAdded;
};

struct Ba
{
    vector<BarMessage> Messages;

    void AddMessage(const char *message, int Length)
    {
        BarMessage m;

        m.message = message;
        m.Length = Length;

        time(&m.TimeAdded); // set time ?

        Messages.push_back(m);
    }

    BarMessage & GetMessageWithin(string pattern, int span = 200)
    {
        //Time.Now?
        time_t now;
        time(&now);

        if (this->Messages.size() > 0)
        {
            for (auto & messages : this->Messages)
            {
                //Stuck here!!!

                //I want to return the BarMessage of a message
                //that was added within 200 (span)
                //that also contains the string patten inside it
            }
        }
    }
};
4

1 に答える 1

1

まず、BarMessageで文字列を使用します

struct BarMessage
{
    int Length;
    string message;
    time_t TimeAdded;
};

一致する文字列の検索の詳細については、http://www.cplusplus.com/reference/string/string/find/を参照してください。char*代わりに使用する正当な理由はありますstringか?この関数から参照を返しますか?なぜパターンを参照としてではなく値としてconst渡すのですか?

BarMessage & GetMessageWithin(const string& pattern, int span = 200)
{
    //Time.Now?
    time_t now;
    time(&now);

    if (this->Messages.size() > 0)
    {
        for (auto & messages : this->Messages)
        {
            if (now - messages.TimeAdded <= 200 && 
                messages.message.find(pattern) != std::string::npos) {
                //then return this message
            }
        }
    }
}
于 2012-12-25T18:40:37.143 に答える