1

次の文字列があります

/foo123/bar123/card45/foofoo/1.3/

そして、「カード」という単語に続く数字を解析したいと思います。上記の例では 45 です。これには sscanf を使用する必要がありますか?

ありがとう

4

3 に答える 3

3

sscanf[XYZ 問題]に使用する必要がありますか

いいえ。

ただし、代わりにstrstrandを使用できます。strtol

const char *s = "/foo123/bar123/card45/foofoo/1.3/";
const char *p = "card";
const char *t = strstr(s, p);

int i = -1; // a negative number indicates a parse failure, for example
if (t != NULL) {
    t += strlen(p);
    char *end;
    i = strtol(t, &end, 10);
    if (!end || *end != '/') {
        // parsing the number failed
    }
}
于 2013-04-30T18:13:30.783 に答える
2

strstr()続いて使用するsscanf()と、仕事ができます。文字配列にソース文字列があるとします。次に、source_stringこれを使用します。

char * ptr;
ptr = strstr(source_string,"card");

sscanf (ptr,"%*s %d",&number);  //Sorry this is wrong!!
sscanf(ptr,"card%d",&number);   //This is right!!
sscanf(ptr,"%*4s%d",&number);   //This works too


printf("The card number is %d",number);

strstr()"card" が始まるアドレスを取得します。次に、そのアドレスをsscanf()ソースとして に渡します。 は%*s"card" を読み取りますが、破棄します。この後、 は%d"card" に続く番号を読み取り、それを整数変数 に格納しnumberます。を使用して表示しますprintf()

于 2013-04-30T18:20:27.303 に答える