次の文字列があります
/foo123/bar123/card45/foofoo/1.3/
そして、「カード」という単語に続く数字を解析したいと思います。上記の例では 45 です。これには sscanf を使用する必要がありますか?
ありがとう
sscanf
[XYZ 問題]に使用する必要がありますか
いいえ。
ただし、代わりにstrstr
andを使用できます。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
}
}
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()
。