0

次のような URL があるとします。

dvb://1.3f3.255c.15

私の質問は、次の方法でこのアドレスを解析する方法です:

val1 = 1
val2 = 3f3
val3 = 255c
val4 = 15

最初のアイデアはstrchr()、標準 C ライブラリから使用することですが、以前に使用した可能性があります。できるだけシンプルにしたいと思います。私が成功するとき、私は私の解決策を出します。

よろしくお願いします

4

3 に答える 3

2

あなたが使用することができますstrtok

char dvb_url[] = "dvb://1.3f3.255c.15";

//Begin stripping the scheme (dvb:/)
char *tokenized = strtok(dvb_url, "/");
//Finish stripping scheme
tokenized = strtok(NULL, "/.");

while(tokenized != NULL)
{
    //Store in variable here            
    printf("%s\n", tokenized);
    tokenized = strtok(NULL, ".");
}
于 2011-08-19T14:42:42.503 に答える
1

パターンが修正されている場合、非常に簡単な答えがあります。このように使っている人がどれだけいるかわかりません。

sscanf()ここで非常に便利です:)

char *dvb_string = "dvb://1.3f3.255c.15";
char proto[10], output1[10], output2[10], output3[10], output4[10];
sscanf(dvb_string, "%[^:]://%[^.].%[^.].%[^.].%s", proto, output1, output2, output3, output4);
fprintf(stderr, "%s -- > %s %s %s %s %s\n", dvb_string, proto, output1, output2, output3, output4);

出力:

dvb://1.3f3.255c.15 -- > dvb 1 3f3 255c 15

このように単純です:) Cを楽しんでください。

よろしく

于 2012-06-22T09:06:19.897 に答える
0

strchr()関数は十分に便利だと思います:

char *str = "dvb://1.3f3.255c.15";
char val[10][256];
char *cur = str;
int i = 0;

for ( ; cur = strchr(str, '.'); cur != NULL && i < 10)
{
    strncpy(val[i], cur, 256);
    if(strchr(val[i], '.') != NULL)
        strchr(val[i], '.') = '\0';
    ++i;
}

で値を取得する必要がありますval[0 to N]

于 2011-08-19T14:41:26.653 に答える