一.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,...)
举个例子:
#include<iostream>
#include<cstdio>
using namespace std;
void test(int x)
{
char buf[20];
sprintf(buf,"%d",x);
cout << buf << endl;
sprintf(buf,"buf = %d",x);
cout << buf << endl;
sprintf(buf,"buf = %08d",x);
cout << buf << endl;
}
void test0()
{
test(1);
test(2);
}
int main(){
test0();
}
结果:
1
buf = 1
buf = 00000001
2
buf = 2
buf = 00000002