sscanf函数实现,sscanf_s函数的用法

http://www.itjxue.com  2023-01-16 06:49  来源:未知  点击次数: 

c++中sscanf函数与sprintf函数的用法

一.sscanf 读取格式化的字符串中的数据

sscanf和scanf类似,都是用于输入的,只是后者以屏幕为输入源,而前者以固定字符串为输入。

sscanf() 是从一个字符串中读进与指定格式相符的数据

二.sprintf与printf的用法很类似,只不过是前者输出到指定的目标,后者输出到屏幕。

sprintf()指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。

int scanf(const char format [,agument])

其中format可以是一个或多个

{%[ ][width][{h | l | l64 | L}]}type

{a|b|c}表示a、b、c中选一,[d]表示d是可有可无的。

所以,format形式可以有:

%s

%5s

%[a-z]5d

注意:

%*[width][{h | l | l64 | L}]}type表示过滤满足条件的字符串,不向目标中输出。

1、基本用法,取字符串

string source0 = "1234456";

char str[521];

sscanf(source0.c_str(),"%s",str);

sscanf(source0.c_str(),"%4s",str);

2、转换为整型数

string source0 = "123456";

int x;

sscanf(source0.c_str(),"%d",x);

sscanf(source0.c_str(),"%3d",x);

3、停止和范围

sscanf(source0,"%[^a]",str); //遇到“a”停止

sscanf(source0,"%[^c]",str); //遇到“c”停止

sscanf(source0,"%[1-9A-Z]",str); //只取范围1-9和A-Z的字符

sscanf(source0,"%[^b-z]",str); //遇到“b-z”停止

sscanf(source0,"%[^c-z]",str); //遇到“c-z”停止

4、格式转换

char source[512] = "2015:8:1";

int a,b,c;

sscanf(source,"%d:%d:%d",a,b,c);

注意:这个地方a、b、c必须加引用,否则会报错。

5、复杂情况

char source[512] = "fjkdsjf/123456@fjkdsjf";

char str[512];

sscanf(source,"%*[ /]/%[ @]",str);

结果为:123456

sprintf

sprintf与printf的用法很类似,只不过是前者输出到指定的目标,后者输出到屏幕。

int sprintf(char *buffer,const char *format,...)

举个例子:

结果:

1

buf = 1

buf = 00000001

2

buf = 2

buf = 00000002

怎么利用sscanf() 读取字符窜中的整数 VC++?

sscanf()函数用于从字符串中读取指定格式的数据,其原型如下:

int sscanf (char *str, char * format [, argument, ...]);

【参数】参数str为要读取数据的字符串;format为用户指定的格式;argument为变量,用来保存读取到的数据。

【返回值】成功则返回参数数目,失败则返回-1,错误原因存于errno 中。

sscanf()会将参数str 的字符串根据参数format(格式化字符串)来转换并格式化数据(格式化字符串请参考scanf()), 转换后的结果存于对应的变量中。

sscanf()与scanf()类似,都是用于输入的,只是scanf()以键盘(stdin)为输入源,sscanf()以固定字符串为输入源。

【实例】从指定的字符串中读取整数和小写字母。#include stdio.hint main(void){ char str[100] ="123568qwerSDDAE"; char lowercase[100]; int num; sscanf(str,"%d %[a-z]", num, lowercase); printf("The number is: %d.\n", num); printf("The lowercase is: %s.", lowercase); return 0;}

输出结果:

The number is: 123568.

The lowercase is: qwer.

可以看到format参数有些类似正则表达式(当然没有正则表达式强大,复杂字符串建议使用正则表达式处理),支持集合操作,例如:

%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)

%[aB'] 匹配a、B、'中一员,贪婪性

%[^a] 匹配非a的任意字符,贪婪性

另外,format不仅可以用空格界定字符串,还可以用其他字符界定,可以实现简单的字符串分割(更加灵活的字符串分割请使用strtok())。例如:

sscanf("2006:03:18", "%d:%d:%d", a, b, c);

sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);

sscanf()如何实现?

sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

举个例子给你看:

char* pQueryStr=getenv("QUERY_STRING");

char pName[256];

sscanf(pQueryStr,"name=%s",pName);

printf("Hello %s!\n",pName);

最后显示出来的就是:Hello tom!

(责任编辑:IT教学网)

更多

推荐CSS教程文章