1

私はこれらのような標準文字列を持っています:

ユーザー名:メッセージ

一見簡単な問題のように見えますが、この問題は、名前の最後の文字が「:」であり、文字列のメッセージ部分の最初の文字も「:」である可能性があることです。ユーザーの名前にスペースを含めることもできます。

したがって、ユーザーは名前'some name:'であり、メッセージを入力する可能性があります':Hello'

これは次のようになります:'名前:::こんにちは'

私はユーザー名のリスト(ベクトル)を持っています。

これを考えると、この種の文字列からユーザー名を抽出する方法はありますか?(理想的には、ユーザーのリストを繰り返す必要はありません)

ありがとう

4

4 に答える 4

1

ユーザー名に「:」文字が含まれていないことを保証できず、チェックするたびにリスト全体を繰り返すのを避けたい場合は、ショートカットを試すことができます。

特殊文字を含むユーザー名のみのベクトルを保持します (これはすべてのユーザー名の小さなサブセットであると想像しています)。最初にそれらを確認し、一致が見つかった場合は、 [username]: の後の文字列を取得します。それ以外の場合は、単純にコロンで単純な分割を行うことができます。

于 2012-04-18T19:58:34.780 に答える
1

のような正規表現を試してください(\w+?):\ \w+

于 2012-04-18T19:56:36.337 に答える
0

文字列トークンを使用します

string text = "token, test   string";

char_separator<char> sep(":");
tokenizer< char_separator<char> > tokens(text, sep);
BOOST_FOREACH(string t, tokens)
{
    cout << t << "." << endl;
}
于 2012-04-18T19:58:40.373 に答える
0

これにアプローチする方法は、単純に最初のコロンを見つけることです。そこで弦を分割し、残りの 2 つの弦をトリムします。

追加のコロンがある理由と、それらが値の一部であるかどうかは、私には完全には明らかではありません。それらを削除する必要がある場合は、それらも削除する必要があります。

于 2012-04-18T19:59:43.937 に答える