一.sscanf 讀取格式化的字符串中的數(shù)據(jù)
sscanf和scanf類似,都是用于輸入的谐宙,只是后者以屏幕為輸入源烫葬,而前者以固定字符串為輸入。
sscanf() 是從一個字符串中讀進與指定格式相符的數(shù)據(jù)
二.sprintf與printf的用法很類似凡蜻,只不過是前者輸出到指定的目標搭综,后者輸出到屏幕。
sprintf()指的是字符串格式化命令划栓,主要功能是把格式化的數(shù)據(jù)寫入某個字符串中力穗。
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府框、轉(zhuǎn)換為整型數(shù)
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讥邻、格式轉(zhuǎn)換
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);
結(jié)果為: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();
}
結(jié)果:
1
buf = 1
buf = 00000001
2
buf = 2
buf = 00000002