精华内容
下载资源
问答
  • sscanf与ssprintf的用法

    2018-04-03 21:28:27
    二、ssprintf()函数 srpintf()函数的功能非常强大:效率比一些字符串操作函数要高;而且更具灵活性;可以将想要的结果输出到指定的字符串中,也可作为缓冲区,而printf只能输出到命令行上~ 1、头文件: #...

    一、sscanf函数
    1、函数原型
    int sscanf( const char , const char , …);
    int sscanf(const char *buffer,const char *format,[argument ]…);
    buffer存储的数据
    format格式控制字符串
    argument选择性设定字符串
    sscanf会从buffer里读进数据,依照format的格式将数据写入到argument里
    2、头文件

    #include<stdio.h> or #include<cstdio>

    3、返回值
    成功则返回参数数目,失败则返回-1,错误原因存于errno中。
    经多次测试[来源请求],在linux系统中成功返回的是成功转换的值的个数,例如:
    sscanf(“1 2 3”,”%d %d %d”,buf1, buf2, buf3); 成功调用返回值为3,即buf1,buf2,buf3均成功转换。
    sscanf(“1 2”,”%d %d %d”,buf1, buf2, buf3); 成功调用返回值为2,即只有buf1,buf2成功转换。
    (注意:此处buf均为地址)
    4、说明:
    sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。
    第二个参数可以是一个或多个 {%[*] [width] [{h | I | I64 | L}]type | ’ ’ | ‘\t’ | ‘\n’ | 非%符号}
    注:
    1>、亦可用于格式中, (即 %*d 和 %*s) 加了星号 () 表示跳过此数据不读入. (也就是不把此数据读入参数中)
    2>、{a|b|c}表示a,b,c中选一,[d]表示可以有d也可以没有d。
    3>、width表示读取宽度。
    4>、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节size,L表示4字节size(double例外),l64表示8字节size。
    5>、type :这就很多了,就是%s,%d之类。
    6>、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
    失败返回0,否则返回格式化的参数个数
    5、支持集合操作
    %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
    %[aB’] 匹配a、B、’中一员,贪婪性
    %[^a] 匹配非a的任意字符,并且停止读入,贪婪性 C语言函数sscanf()的用法
    例子
    例子
    1. 常见用法。
    char buf[512];
    sscanf(“123456”,”%s”,buf); //此处buf是数组名,它的意思是将123456以%s的形式存入buf中!
    printf(“%s\n”,buf);
    结果为:123456

    1. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
      sscanf(“123456”,”%4s”,buf);
      printf(“%s\n”,buf);
      结果为:1234

    2. 取到指定字符为止的字符串。如在下例中,取遇到任意小写字母为止的字符串。
      sscanf(“123456abcdedf”,”%[^a-z]”,buf);
      printf(“%s\n”,buf);
      结果为:123456

    3. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
      sscanf(“123456abcdedfBCDEF”,”%[1-9a-z]”,buf);
      printf(“%s\n”,buf);
      结果为:123456abcdedf

    当输入: sscanf(“123456abcdedfBCDEF”,”%[1-9A-Z]”,buf);
    printf(“%s\n”,buf);
    结果为:123456BCDEF(错!!!)
    注:结果应该为:123456(因为遇到不是1-9或者A-Z的字符时,即遇到小写字母时,就已经结束。)

    1. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
      sscanf(“123456abcdedfBCDEF”,”%[^A-Z]”,buf);
      printf(“%s\n”,buf);
      结果为:123456abcdedf

    6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,
    先将 “iios/”过滤掉,再将非’@’的一串内容送到buf中
    sscanf(“iios/12DDWDFF@122”,”%*[^/]/%[^@]”,buf);
    printf(“%s\n”,buf);
    结果为:12DDWDFF

    7、给定一个字符串“hello, world”,仅保留world。
    (注意:“,”之后有一空格,%s遇空格停止,加*则是忽略第一个读到的字符串)
    sscanf(“hello,world”,”%*s%s”,buf);
    printf(“%s\n”,buf);
    结果为:world
    %*s表示第一个匹配到的%s被过滤掉,即“hello,”被过滤了。
    如果没有空格则结果为NULL。

    8、最简明的格式是tab间隔的字符串
    sscanf(“字符串1\t字符串2\t字符串3”,”%s%s%s”,str1,str2,str3);
    printf(“%s\t%s\t%s\n”,str1,str2,str3);
    结果为:字符串1 字符串2 字符串3

    9、将输入的合法字符串转换为浮点数
    double buf;
    sscanf(“-123.154”,”%lf”,&buf);
    printf(“%.4lf\n”,buf);

    二、ssprintf()函数
    srpintf()函数的功能非常强大:效率比一些字符串操作函数要高;而且更具灵活性;可以将想要的结果输出到指定的字符串中,也可作为缓冲区,而printf只能输出到命令行上~
    1、头文件:

    #include<stdio.h>

    2、函数功能:
    格式化字符串,将格式化的数据写入字符串中
    3、函数原型:
    int sprintf(char *buffer, const char *format, [argument]…)
    4、参数:
    (1)buffer:是char类型的指针,指向写入的字符串指针;
    (2)format:格式化字符串,即在程序中想要的格式;
    (3)argument:可选参数,可以为任意类型的数据;
    5、函数返回值:
    buffer指向的字符串的长度
    6、用处
    (1)格式化数字字符串:在这点上sprintf和printf的用法一样,只是打印到的位置不同而已,前者打印给buffer字符串,后者打印给标准输出,所以sprintf也可以用来将整型转化为字符串,比itoa效率高且如此地简便~比如:sprintf(buffer, “%d”, 123456);执行后buffer即指向字符串“123456”~
    (2)连接字符:
    (a)连接以’\0’结束的字符串

    #include<stdio.h>  
    int main()  
    {  
                      char buffer[10];  
            char *a = "1234";  
        char *b = "5678";  
                   sprintf(buffer, "%s%s", a, b);  
                      printf("%s\n", buffer);  
                      return 0;  
    }  

    (b)连接结尾没有’\0’的字符数组或字符串缓冲区:

    #include<stdio.h>  
    int main()  
    {  
                   char a[] = {'1', '2', '3', '4'};  
                   char b[] = {'5', '6', '7', '8'};  
                  char buffer[10];  
                  sprintf(buffer, "%.4s%.4s", a, b);  
                  printf("%s\n", buffer);  
                  return 0;  
    } 

    7、sprintf()最常见的应用之一莫过于把整数打印到字符串中,如:
    sprintf(s, “%d”, 123); //把整数123打印成一个字符串保存在s中
    sprintf(s, “%8x”, 4567); //小写16进制,宽度占8个位置,右对齐
    sprintf()会根据参数format 字符串来转换并格式化数据,然后将结果复制到参数str 所指的字符串数组,直到出现字符串结束(‘\0’)为止。关于参数format 字符串的格式请参考printf()。

    #include<stdio.h>
    #include<iostream>
    using namespace std;
    int main(){
    
        //--------------数字转字符串,使用sprintf(char数组名,类型,数字变量名) 
        //整数转十进制字符串
        char str[10];
        int a=1234321;
        sprintf(str,"%d",a);
    
        //小数转十进制字符串 
        char str1[10];
        double b=123.321;
        sprintf(str1,"%.3lf",b);
        //十进制整数转十六进制字符串
        char str2[10];
        int c=175;
        sprintf(str2,"%x",c);
        cout<<"数字-->字符串:"<<endl;
        cout<<str<<endl<<str1<<endl<<str2<<endl;
    
        //----------------字符串转数字,使用sscanf()函数
        //字符串转整数 
        char str3[]="1234321";
        int d;
        sscanf(str3,"%d",&d); 
    
        //字符串转小数
        char str4[]="123.321";
        double e;
        sscanf(str4,"%lf",&e);
        //十六进制字符串转十进制整数
        char str5[]="AF";
        int f;
        sscanf(str5,"%x",&f); 
    
        cout<<"字符串-->数字:"<<endl;
        cout<<d<<endl<<e<<endl<<f<<endl;
    }
    展开全文
  • 记几个这方面内容的博客: [c++] sscanf, sprintf, sscanf_s ssprintf()函数和sscanf()函数的用法
    展开全文
  • ssprintf,sscanf两个黑科技的作用

    千次阅读 2016-04-11 23:05:35
    ssprintf,sscanf两个黑科技的作用 关于这2个函数的使用方法网上一搜一大把,可我却还没有发现有好的文章来介绍它们在写题时的神奇用法。这里我也不做过多介绍,就讲一讲它们真正需要用到它们的地方。 int a=...

    ssprintf,sscanf两个黑科技的作用

    关于这2个函数的使用方法网上一搜一大把,可我却还没有发现有好的文章来介绍它们在写题时的神奇用法。这里我也不做过多介绍,就讲一讲它们真正需要用到它们的地方。

    int a=13345678;

    char s[25]="\0";

    我们知道,对于int这些数字类型我们无法直接对其某一位上的数字进行操作,但是字符串却有随机操作的优点,可以直接对其中某一个字符进行操作。那么我们是否可以把一个int类型(不仅是int这里只是方便说明)的存到一个字符串里再进行所需要的操作之后再读取出来呢?ssprintf和sscanf就很好的满足了这一操作,

    ssprintf(s,"%s",a);     这个语句可以将int 型的a以字符串的形式打印到s里面,此时s为13345678+'\0',然后假设我们要把a变成12345678,只要执行    s[1]='2';  便行了,此时s就变成了12345678+'\0',然后再通过执行:

    sscanf(s,"%d",&a);  这个语句就可以把s以整形十进制的形式输入到a中了。此时a就变成了12345678。

    读者可以去做一做poj-3126,就可以用到这个技巧哦!附上链接:点击打开链接 题解可以在我的BFS分类里找哦亲!

    是不是很方便呢?在高精度的进制的转换中它们也可以起到很好的作用哦,不如仔细思考思考吧!

    展开全文
  • ssprintf()函数和sscanf()函数的用法

    ssprintf()函数和sscanf()函数的用法

    1、ssprinf( )函数的用法

    sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一个格式化的字符串输出到屏幕,其原型为:
        int sprintf(char *str, char * format [, argument, ...]);
    sprintf()会根据参数format 字符串来转换并格式化数据,然后将结果复制到参数str 所指的字符串数组,直到出现字符串结束('\0')为止。
    【返回值】成功则返回参数str 字符串长度,失败则返回-1,
    sprintf()最常见的应用之一莫过于把整数打印到字符串中,如:
        sprintf(s, "%d", 123);  //把整数123打印成一个字符串保存在s中
        sprintf(s, "%8x", 4567);  //小写16进制,宽度占8个位置,右对齐

    2、sscanf( )函数的用法
    sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
    sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
    函数原型:
    int sscanf( string str, char *format, mixed var1, mixed var2 ... );
    eg: sscanf(surBuf, "%[1-9]", dstBuf);
    先说下%[]:其基本格式为 %[set],表示将接收一个由set指定格式的字符串,其中set表示可接受的字符集合。
    set一般有两种情况:
    一种是"^set"表示非, 即在输入的字符串中将匹配所有不在set中出现的字符,遇到set中的字符时停止匹配。
    另一种是"set"表示在输入的字符串中将匹配所有在set中出现的字符,遇到非set中的字符时停止匹配。
    eg:
    sscanf("hello,world","%[^,]",buf); //当surBuf字符串中出现","时停止匹配,则buf=hello;
    sscanf("abcdefg","%[^gfd]",buf);//当surBuf字符串中出现'g','f','d'中的任意一个时停止匹配,则buf=abc,
      即surBuf字符串中出现了d,f,g时不再将surBuf字符串中内容放入buf
    sscanf("abcdefg","%[cbad]",buf);//只匹配'a','b','c','d'这几个字符,如果不是这几个字符则停止匹配,buf=abcd 
    特殊情况:
    (1)如果要匹配"^"时,当然不能直接放在[]中,所以可以用%[ab^cd]这种方式,
    (2)当要匹配右方括号"]"时,应把其放在set中第一个位置,如"%[]abc]"表示匹配的字符集为{], a, b, c},
    又如"%[^]abc]"表示匹配所有非"], a, b, c"中的字符
    另外,还可以使用"-" 如%[a-z]表示只匹配abcd....yz等小写的字母;%[0-9]表示只匹配0,1,2...9等数字;
    (3) * 表示跳过,如:
    int main()
    {
    char buf[100]="123:2333:ahahaha:hututu:demaxiya:12138:hello";
    char user[20]="";
    char host[20]="";
    char msg[20]="";
    int cmd = 0;
    sscanf(buf, "%*d:%*[^:]:%*[^:]:%[^:]:%[^:]:%d:%s", user, host, &cmd, msg);
    return 0;
    }
    结果:user="hututu",host="demaxiya",cmd=12138,msg=hello
        注意,“-”的字符只有在其左右两边都有有效字符时才有这个作用,否则被认为是普通字符,如“a-c-e-g”匹配的字符为{a, b, c, -, e, f, g},这样也为输入“-”字符提供了方法。




    其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}
      注:
      1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
      2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
      3、width表示读取宽度。
      4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
      5、type :这就很多了,就是%s,%d之类。
      6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
      支持集合操作:
      %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
      %[aB'] 匹配a、B、'中一员,贪婪性
      %[^a] 匹配非a的任意字符,贪婪性
    注意:在读入的字符串是空字符串时,sscanf函数并不改变待读入到的字符串的值。
    常见用法:
    1、取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。  
        sscanf("123456 ", "%4s", buf);  
    2、给定一个字符串“hello, world”,仅保留world。(注意:“,”之后有一空格)  
        //%*s表示第一个匹配到的%s被过滤掉,即hello和逗号被过滤了,过滤一空格结束,如果没有空格则结果为NULL。  
        sscanf("hello, world", "%*s%s", buf);  
        3、sscanf("16:12:02", "%d:%d:%d",&a1,&b1,&c1);//这个不行啊  
    以及2006:03:18 - 2006:04:18:
    char sztime1[16] = "", sztime2[16] = "";
    sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);

    展开全文
  • ssprintf函数和sscanf函数作用相反,可以理解成把int类型转变为char类型。 但是,要注意一点 sprintf(s,"%d+%d=%d\n",a,b,c); 如果在第二栏里面输入了一个’\n‘,那么你用strlen()计算出来的长度会包括一个’\n‘。...
  • 1、ssprintf、sscanf用头文件 <cstdio> ssprintf: sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一个格式化的字符串输出到屏幕。sprintf的第一个参数应该是目的字符串,如果不...
  • 1、前言  我们经常涉及到数字与字符串之间的转换,例如将32位无符号整数的ip地址转换为点分十进制的ip地址字符串,或者反过来。...之前对字符串和数字之间的关系不是很熟悉,工作中经常涉及到这个,如是好好总结...
  • sscanf(str, “%d”, &amp;amp;amp;n); //str-&amp;amp;gt;int(int only, if double-&amp;amp;gt;int(floor)) sprintf(str, “%d”, n); //int-&amp;amp;gt;str(only int, if double-&...int(floor))
  • #include #include int main(){ int a=127,b=25,c=185,d=1; int res = 0; char str[16]; res = sprintf(str,"%d.%d.%d.%d",a,b,c,d);//res为成功输出到str中的字符的个数 printf("%s %d\n",str,res);...
  • 问题是给一个如下格式的数据,不知道会有多少行,也不知道每行有多少个数,用逗号分割,利用C++输入,有哪些方式? 2,3,2,3,2,3,2,323 10,14,1324,242143 方案一: 每次读取一行,将每行的数据转换, ...
  • 之前定义日志输出时用的下面的方法 1 #ifdef DEBUG // 调试状态, 打开LOG功能 2 #define CXTLog(...) NSLog(__VA_ARGS__) 3 #else // 发布状态, 关闭LOG功能 4 #define CXTLog(...) ...感觉很完美,但是最近升级...
  • 格式化输出Sprintf

    2021-03-14 04:02:34
    例如:结构体格式化输出// 匿名结构体声明, 并赋予初值profile := &struct {Name stringAge int}{Name: "sun",Age: 20,}使用'%+v' &{Name:sunAge:20}使用'%#v' &struct { Name string;...
  • sprintf()函数的用法

    万次阅读 多人点赞 2018-08-22 13:59:34
    sprintf函数的格式:int sprintf( char *buffer, const char *format [, argument,...] ); 除了前两个参数固定外,可选参数可以是任意个。buffer是字符数组名;format是格式化字符串 常用方式 sprintf函数的功能与...
  • 51中printf使用注意C51标准串口发送程序(已C8051F120为例,注意C8051F120特殊功能寄存器是分页的)/***********************************************************函数名称:send_char_com函数功能:向串口发送一字节...
  • sprintf拼接字符串

    千次阅读 2019-12-26 21:01:57
    sprintf()返回值
  • 以前刚用C语言的时候,觉得字符串很难处理,后来用多了,发现其实并非如此,C语言也提供了许多函数给程序员使用。今天记录一下两个常用的两个字符串处理函数:sprintf和sscanf 1. sprintf 从名称上来看,这个函数...
  • sprintf函数用法详解

    万次阅读 多人点赞 2017-07-14 09:06:41
    sprintf() 格式化输出函数(图形) 功能: 函数sprintf()用来作格式化的输出。 用法: 此函数调用方式为int sprintf(char *string,char *format,arg_list); 说 明: 函数sprintf()的用法和printf()函数一样,只是...
  • 三行代码实现python版本的sprintf函数

    千次阅读 2019-03-18 21:29:19
    sprintf是c语言里面的一个函数,调用方式为sprintf(char *dest_str, char *format_str, arg1, arg2),可以将格式化之后的字符串存到dest_str,dest_str是需要实现声明的,例如下面的程序: #include <...
  • printf(),sprintf(),vsprintf() 详解

    千次阅读 2016-11-24 17:16:45
    printf()   在控制台应用程序中最为常用,使用也很简单。 函数原型:printf(constchar *format,[argument]); 第一个参数是一个格式字串,後面是与格式字串中的代码相对应的不同类型多个参数。...
  • 这些函数的区别在于实现功能以及操作对象不同。 strcpy 函数操作的对象是字符串,完成从源字符串到目的字符串的拷贝功能。sprintf 函数操作的对象不限于字符串:虽然目的对象是字符串,但是源对象可以是字符串、也...
  • c++中sprintf和sprintf_s的区别

    万次阅读 多人点赞 2018-07-21 08:46:29
    sprintf_s是sprintf的安全版本,指定缓冲区长度来避免sprintf()存在的溢出风险,主要差在sprintf_s第二个参数,可以控制缓冲区大小 sprintf/sprintf_s指的是字符串格式化命令,主要功能是把格式化的数据写入某个...
  • 自定义S函数模块构成的Simulink模型C代码转化

    千次阅读 热门讨论 2017-10-24 14:21:53
    本文是在下对过去一个多月工作的总结,也是人生中第一个技术博客。前段日子,由于老师课题需要,分配给我任务是将现存的Simulink控制器模型转化为C语言并在C#中进行调用,用于后台运算。起初以为是直接农夫三连,无...
  • C语言中sprintf用法,%.*s格式输出

    万次阅读 2018-06-16 17:22:39
    sprintf表示将输入的内容"%03x %d foo bar"放入sval数组中,用32替换%03x, 用3141592替换%d ,%03x表示十六进制在用%.*s时,后面跟着两个参数,如下 a表示输出数据占得位置的大小,sval 表示要输出的内容#...
  • 具有自动截断功能的函数:对比:strcpy、strncpy、sprintf、snprintf在写入的数据大于缓冲区的情况下如何处理

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 136
精华内容 54
关键字:

ssprintf

友情链接: Tetris.rar