2

コマンドの出力から読み取った文字列のベクトルがあります。出力の形式は、キーとIP値を含みます。

key:  0 165.123.34.12
key:  1 1.1.1.1
key1: 1 3.3.3.3

キーの値を0、1、1として読み取り、各キーのipsを読み取る必要があります。どの文字列関数を使用できますか?

4

3 に答える 3

1

とを使用rfindsubstrます。

まず' '、右から最初のインデックスを見つけます。それが部分文字列の終わりになります。次に、前のものを見つけます。

2つのインデックス間の部分文字列を取得します。

文字列に末尾のスペースがある場合は、事前にそれらをトリミングする必要があります。

コードが削除されました

于 2012-08-24T13:42:59.023 に答える
1

C++の簡単な解決策は次のとおりです。

const char *data[] = {"key:  0 165.123.34.12", "key:  1 1.1.1.1", "key1: 1 3.3.3.3"};
vector<string> vstr(data, data+3);
for (vector<string>::const_iterator i=vstr.begin() ; i != vstr.end() ; ++i) {
    stringstream ss(*i);
    string ignore, ip;
    int n;
    ss >> ignore >> n >> ip;
    cout << "N=" << n << ", IP=" << ip << endl;
}

ideoneの場合:リンク

于 2012-08-24T13:45:32.677 に答える
1

sscanf()非常に便利です:

char* s = "key: 14 165.123.34.12";
int key_value;
char ip_address[16];

if (2 == sscanf(s, "%*[^:]: %d %15s", &key_value, ip_address))
{
    printf("key_value=%d ip_address=[%s]\n", key_value, ip_address);
}

出力:

key_value = 14 ip_address = [165.123.34.12]

フォーマット指定子"%*[^:]"は、最初のコロンに読み取ることを意味しますが、変数には割り当てません。

于 2012-08-24T13:49:34.400 に答える