Sscanf

来自MudWiki

名称

   sscanf() - 从一个字符串匹配格式化输入

语法

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

描述

   以格式 `fmt` 分析字符串 `str`,`fmt` 可以包含使用 `%d`(或 `%x`)或 `%s` 分隔的字符串,每一个 `%d` 和 `%s` 按顺序对应一个变量参数 `var1`、`var2`...。`%d` 读入整数到变量,`%s` 读入字符串到变量。* 也可以用在格式定义符中(如 %*d 和 %*s),表示忽略对应的内容(不分配给变量)。LPC语言中的 sscanf() 函数和C语言中的同名函数功能类似,但又稍有不同,一方面不需要像C语言一样对普通变量使用取地址运算符 &,另一方面在LPC语言中 sscanf(str, "%s %s",  str1,  str2) 会把第一个单词分配给变量str1,剩余部分分配给str2,而在C语言中str2只会是第二个单词。请注意 `%s%s` 是不能使用的。

   返回值是匹配字符串的格式定义符数量。
   Specifiers:
       %s          -   match a string
       %d          -   match an integer
       %f          -   match a float
       %x          -   match a base 16 number and convert to base 10
       %(regexp)   -   match a regexp pattern

   The "*" may be used in a specifier (e.g. "%*s") to skip over a match in
   the input string and not assign it to a function argument.   A "%%" may
   be used to match the "%" character,  which will also be skipped over in
   the function arguments.


EXAMPLE

   Basic Usage:
       string what, who;

       if (sscanf(input, "give %s to %s", what, who) == 2)
           write("You give " + what + " to " + who + ".");
       else
           write("Give what to who?");

       sscanf("give", "give %s to %s", what, who) == 0
       // what == UNDEFINED && who == UNDEFINED

       sscanf("give item", "give %s to %s", what, who) == 1
       // what == "item" && who == UNDEFINED

       sscanf("give item to name", "give %s to %s", what, who) == 2
       // what == "item" && who == "name"
   Numeric:
       int i;
       sscanf("123", "%d", i) == 1
       // i == 123

       float f;
       sscanf("1.23", "%f", f) == 1
       // f == 1.230000

       int b10;
       sscanf("ABC", "%x", b10) == 1
       // b10 == 2748
   Regexp:
       string str1, str2;
       sscanf("one two", "%([a-z]+) %([a-z]+)", str1, str2) == 2
       // str1 == "one" && str2 == "two"

参考

   explode(3), replace_string(3), strsrch(3)

翻译

   雪风(i@mud.ren)