您的位置首页百科知识

C++:sscanf函数的用法

C++:sscanf函数的用法

的有关信息介绍如下:

C++:sscanf函数的用法

绪:

头文件 #include 里,

sscanf具有从字符串中取出整数,浮点数,和字符串等功能;

本文主要介绍sscanf函数的定义,用法和示例;

sscanf定义:

int sscanf (const char *str, const char * format,........);

函数说明:

sscanf将str字符串以format格式进行转换,并将转换的结果存于对应的参数内。

返回值:

成功则返回参数数目;

失败则返回-1;

例如:sscanf(str,"%d%d%s", &i,&i2, &s);

如果三个都读入成功,则返回3;

如果只读入第一个整数到i则返回1。

用法一:从字符串中去除整数,浮点数,和字符串等;

#include

using namespace std;

int main()

{

int i;

unsigned int j;

char input[ ]="10 0x1b aaaaaaaa bbbbbbbb";

char s;

sscanf(input,"%d %x %5[a-z] %*s %f",&i,&j,s,s);

printf("%d %d %s ",i,j,s);

getchar();

return 0;

}

用法二:

格式:

sscanf(stringBuf.c_str(), "%20[^#]#%20[^ ]",......)

语句中,""中的内容含义为:

“%[ ]”符号用于声明字符串,比“%s”更具体,可以用于设置读取的样式。

例如“%[a-z]”只读取小写字母,读到其它字符就结束。

注意,方括号中如果有“^”,代表一直读到某字符为止。

例:

“%[^#]”:读取字符串,一直到出现“#”号为止。

“%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","%[1-9a-z]",str);

printf("str=%s",str);

⑤取指定字符集为止的字符串。

如在下例中,取遇到大写字母为止的字符串。

sscanf("123456abcdedfBCDEF","%[^A-Z]",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[^\n]",name, sku, &price, &quantity, category, vendor);

其中:

%20[^#]#-最多读入20个字符,直到遇见界定符#,但不包含界定符

%f#-读入一个浮点数,直到遇见界定符#

%i#-读入一个整数,直到遇见界定符#

%20[^\n]-最多读入20个字符,忽略行尾的回车符

示例:

sscanf(user, "%127[^:]:%127[^ ]", user_name, password);

其中:

"%127[^:]:%127[^ ]",是正则表达式

127表示最多可以接受127个字符,

[^:]是正则表达式,表示非":",到":"结束

%127[^ ],[^ ]是正则表达式,表示非" ",到" "结束

所以,如果user是"wpc:123456"的字符串,

那么经过上面的sscanf后,user_name是wpc,而password是123456。