sprintf 和 sscanf 详细解读(有可运行代码)

来源:互联网 发布:免费流量软件下载 编辑:程序博客网 时间:2024/06/13 08:43


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[] = "CSDN";    int len = sprintf(s, "%s %s love %s.", who,vv,whom); //产生:"I very love CSDN. "    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;}


原创粉丝点击