C++:sscanf函数的用法
来源:网络收集 点击: 时间:2024-03-10sscanf定义:
int sscanf (const char *str, const char * format,........);
函数说明:
sscanf将str字符串以format格式进行转换,并将转换的结果存于对应的参数内。
返回值:
成功则返回参数数目;
失败则返回-1;
例如:sscanf(str,%d%d%s, i,i2, s);
如果三个都读入成功,则返回3;
如果只读入第一个整数到i则返回1。

用法一:从字符串中去除整数,浮点数,和字符串等;
#include iostream
using namespace std;
int main()
{
int i;
unsigned int j;
char input=10 0x1b aaaaaaaa bbbbbbbb;
char s;
sscanf(input,%d %x %5 %*s %f,i,j,s,s);
printf(%d %d %s ,i,j,s);
getchar();
return 0;
}

用法二:
格式:
sscanf(stringBuf.c_str(), %20#%20,......)
语句中,中的内容含义为:
“%”符号用于声明字符串,比“%s”更具体,可以用于设置读取的样式。
例如“%”只读取小写字母,读到其它字符就结束。
注意,方括号中如果有“^”,代表一直读到某字符为止。
例:
“%”:读取字符串,一直到出现“#”号为止。
“%20”:读取20个字节的字符串,出现“#”号时结束。
所以,“%20#%20”的意义就是:
读取两个20字节大小的字符串,第一个字符串可以用#结束,第二个字符串可以用回车符结束。

用法三:
sscanf可以从字符串中取出整数、浮点数和字符串等等。
①常见用法。
char str={0};
sscanf(123456,%s,str);
printf(str=%s, str);
②取指定长度的字符串。
如在下例中,取最大长度为4字节的字符串。
sscanf(123456,%4s,str);
printf(str=%s, str);
③取指定字符为止的字符串。
如在下例中,取遇到空格为止字符串。
sscanf(123456abcdedf,%, str);
printf(str=%s, str);
④取仅包含指定字符集的字符串。
如在下例中,取仅包含1到9和小写字母的字符串。
sscanf(123456abcdedfBCDEF,%,str);
printf(str=%s,str);
⑤取指定字符集为止的字符串。
如在下例中,取遇到大写字母为止的字符串。
sscanf(123456abcdedfBCDEF,%,str);
printf(str=%s,str);

应用四:
名称:
sscanf() - 从一个字符串中读进与指定格式相符的数据.
语法:
int sscanf( string str, string fmt, mixed var1, mixed var2 ... );
用法:
每一个%d、%s对应一个参数, 按顺序var1, var2 ...,
%d读入一个整数到参数中, 而%s 读入一个字符串.
*亦可用于格式中,即%*d 和%*s,加了星号 (*) 表示跳过此数据不读入。
sscanf()返回符合格式的%d和%s总数;

sscanf的应用:
一个文本文件,
每行是一条记录,
每条记录中包含多个字段,
每个字段之间以某种定界符分开;
举例如下:
Notebook, IBM, ThinkPad X32, 6, 12000
各字段以逗号分隔,内容依次是:物品名称,生产厂家,型号,数量,价格;
如果要对这样的一行记录进行处理,提取出各个字段,怎么做比较好呢?
用标准库函数sscanf,处理这样的数据,只需一行就可以了。
核心部分如下:
float price;
int quantity;
char category, name;
char vendor, sku;
char buf;
fp = fopen(filename, r);
fgets(buf, 200, fp);
sscanf(buf, %20#%20#%f#%i#%20#%20,name, sku, price, quantity, category, vendor);
其中:
%20#-最多读入20个字符,直到遇见界定符#,但不包含界定符
%f#-读入一个浮点数,直到遇见界定符#
%i#-读入一个整数,直到遇见界定符#
%20-最多读入20个字符,忽略行尾的回车符

示例:
sscanf(user, %127:%127, user_name, password);
其中:
%127:%127,是正则表达式
127表示最多可以接受127个字符,
是正则表达式,表示非:,到:结束
%127,是正则表达式,表示非 ,到 结束
所以,如果user是wpc:123456的字符串,
那么经过上面的sscanf后,user_name是wpc,而password是123456。
注意事项sscanf具有从字符串中取出整数,浮点数,和字符串等功能;
成功则返回参数数目; 失败则返回-1;
%”:读取字符串,一直到出现“#”号为止。 “%20”:读取20个字节的字符串,出现“#”号时结束。
SSCANFSCANFSSCANF函数版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_309761.html