sprintf
//sprintf( 目标,格式,原来的数据);//可以把好多 数据都格式化到同一个目标中
//sprintf函数的格式: 最前面是 char 型的字符串,头文件是 #include <stdio.h>
// int sprintf( char *buffer, const char *format [, argument,...] );
#include <cstdio> //测试正确
int main()
{
char s[20];
//意思是,把 十进制数 转换成 8 进制数,存到字符串 是 中
sprintf(s, "%08X", 4567); //产生:"000011D7" //位数不够的话,在前面补 0
printf("%s\n",s);
sprintf(s, "%8d", 4567); //产生:" 4567" //不够的话,补充空格(默认 右对齐)
printf("%s\n",s);
sprintf(s, "%-8d%8d", 4567,1236); //产生:"4567 1236" //( - 号, 左对齐)
printf("%s\n",s);
//这儿的 s 会自动更新值
sprintf(s, "%.3f", 3.1415626); //产生:" 3.142"
printf("%s\n",s);
/*******************************************************************/
char s1[]= {'A','B','C','D','E'};
char s2[]= {'Q','W','E','R','T','Y'};
sprintf(s,"%8.2s",s1); //产生" AB"(先从原来 s1 中取出2个字符,2 <8,所以前面补充6个空格)
printf("%s\n",s);
sprintf(s,"%.4s%.3s",s1,s2); //产生”ABCDQWE”
printf("%s\n",s);
sprintf(s, "%.*s %.*s", sizeof(s1), s1, sizeof(s2), s2); //产生”ABCDE QWERTY”
//如果 ""里面有空格,则空格也被 格式化进入 目标串中
printf("%s\n",s);
/*******************************************************************/
/*sprintf(s, "%s%s",s1,s2); //直接这样连接字符串 不行*/
int i = 100;
sprintf(s,"%.2f",(double)i); //输出”100.00”
printf("%s\n",s);
sprintf(s,"%p",&i); //输出”0028fee8”
printf("i 的内存地址是 %s\n",s);
//对字符串进行连接(可以多个字符串,也可以中间添加),
//效率比strcat 高
char who[] = "I"; //其实用 char *who = "I" 也行
char vv[] = "very";
char whom[] = "优快云";
int len = sprintf(s, "%s %s love %s.", who,vv,whom); //产生:"I very love 优快云. "
printf("%s\n",s);
//sprintf的返回值是字符数组中字符的个数,
//即字符串的长度,不用在调用strlen(s)求字符串的长度。
printf("字符串s 的长度(空格也计数)是%d\n",len); //产生”12”
return 0;
}
sscanf
//sscanf( 原来的数据,格式,目标) //可以把一个数据分解到多个目标中
#include <cstdio> //测试正确
#include <cstring>
int main()
{
int a,b,c;
sscanf("2008: 03: 18","%d:%d:%d",&a,&b,&c);//注意,这儿要取 &
printf("%d %d %d\n",a,b,c); //产生”2008 3 18”
char buf[512];
sscanf("123456(空格) asdf", "%s", buf); //读取的时候,buf 自动清 空
printf("%s\n", buf); //产生”123456”
// cout<<buf<<endl; //在C++中,这样竟然也能输出
sscanf("123456 ", "%4s", buf);
printf("%s\n",buf); //产生”1234”
/*******************************************************************/
sscanf("1234abMNB","%[^N]",buf); //取到字符'N'的时候停止(不包含N)
printf("%s\n",buf); //产生”1234abM”
sscanf("123456abcdMNB","%[1-9a-z]",buf); //只读取数字和小写字母(遇到 其他字母或者字符,停)
printf("%s\n",buf); //产生”123456abcd”
sscanf("123456abBCDEF", "%[^A-Z]", buf);
printf("%s\n",buf); //产生”1234ab”
sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf); //把两个字符之间 的内容读取出来
printf("%s\n", buf); //产生”12DDWDFF”
sscanf("aidc#ad","%[^#]",buf);
printf("%s\n",buf); //产生”aidc”
/*******************************************************************/
sscanf("hello, world", "%*s%s", buf); //以空格间隔,*的内容被过滤 掉
printf("%s\n",buf); //产生”world”
sscanf("12345acc","%*d%s",buf); //5后面,有空格也行
printf("%s\n",buf); //产生”acc”
/*******************************************************************/
char t1[100],t2[100];
sscanf("2006:03:18 - 2008:04:18", "%[0-9,:] - %[0-9,:]",t1, t2);
printf("%s %s\n",t1,t2); //产生”2006:03:18 - 2008:04:18”
char str[100] ="123568qwerSDD!!AE";
char lowercase[100];
double num;
sscanf(str,"%d%[a-z&&A-Z]", &num, lowercase);
printf("The number is: %d.\n", num); //产生”123568”
printf("The lowercase is: %s.", lowercase); //产生”qwerSDD”
/***************************************************************/
double D=1.23;
char s5[]="adadfagag 876.52344 aaaabbb";
sscanf(s5,"%*s%lf",&D); // char to double(字符串转为 double类型)
printf("%.4f\n",D); //产生”876.5234” 自动的进行四舍五入
D = D + 100;
printf("%.4f\n",D); //产生”976.5234”
return 0;
}