SYNOPSIS
        int sscanf(string str, string fmt, mixed var1, mixed var2, ...)

DESCRIPTION
        Parse a string str using the format fmt. fmt can contain
        strings seperated by %d and %s. Every %d and %s corresponds to
        one of var1, var2, ... .

        The match operators in the format string have one of these
        formats:
          %[+][!|~][<size>[.<minmatch>]]<type>

        <type> may be:
           d: matches any number.
           D: matches any number.
           U: matches any unsigned number.
           s: matches any string.
           %: matches the % character.
           t: matches whitespace (spaces and tab characters), but does
              not store them (the simple ' ' matches just spaces and
              can't be given a size specification).

        <size> is the expected field size, <minmatch> the demanded
        minimal match length (defaults are 0 for strings and 1 for
        numbers). Each of these both may be specified numerically, or
        as '*' - then the value of the variable at the current place
        in the argument list is used.

        Specifying + will require that the characters after the field
        match as well, or the match will be deemed unsuccessful (the variable
        might still get assigned, though).

        Specifying ! will perform the match, but neither store the
        result nor count the match.

        Specifying ~ will perform and count the match, but not store
        the result.

        If the %s specifier is not at the end of the format string,
        it is matched only if the following character(s) or format
        is found, too. See below for an example.

        The difference between %d and %D/%U is that the latter will abort
        an immediately preceeding %s as soon as possible, whereas the
        former will attempt to make largest match to %s first.
        %D/%U will still not skip whitespace, use %.0t%D to skip optional
        whitespace.

        If a number is matched that exceeds the numerical limits of
        integers the match is deemed unsuccessful.

        The number of matched arguments will be returned.

        The function sscanf is special, in that arguments are passed
        by reference automatically.

EXAMPLES
        string who, what;
        if (sscanf("throw frisbee to rover",
           "throw %s to %s", what, who) != 2)
           write("Usage: throw <what> to <who>\n");
        else
           write("You throw a "+what+" to "+who+" to get his attention.\n");

        sscanf("ab", "%s%s", who, what)
          ==> result 2, who = "", what = "ab"

        sscanf("ab", "%s %s", who, what)
          ==> result 0, who = 0, what = 0

        sscanf("ab ", "%s %s", who, what)
          ==> result 2, who = "ab", what = ""

HISTORY
        LDMud 3.3.713/3.2.13 introduced the '+' specifier.

SEE ALSO
        explode(E), regexp(E)
