• sscanf函数


    sscanf函数

    前言:做题遇到了,便查阅了很多网上大佬们的资料,有些就用了进来。但有些散乱,就在此一同感谢orz!!!(写总结只是为了以后复习方便,记录一下心得qwq)


    一、一些说明

    1、sscanf跟scanf虽然长得像,但是用法是有很大区别的,简单来讲就是:scanf是从键盘读入,但sscanf是从给定字符串读入

    2、sscanf的函数原型:

    int sscanf( const char *, const char *, ...);

    int sscanf(const char *buffer,const char *format,[argument ]...);

    buffer是存储的数据

    format是格式控制字符串

    argument是选择性设定字符串

    实现原理:sscanf会从buffer中读入数据,然后按照format的格式将数据赋给argument

    3、头文件:(当然万能头<bits/stdc++.h>也是可以的,不过省级以上建议打对应头文件,以防出现一些神奇的错误)这话可不是我说的,是我们老师说的qwq

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


    二、一些操作

    1、sscanf("字符串内容",“%s”,str); 将“字符串内容”赋给另一个字符串数组str

    1 char shan[520];
    2 sscanf("202011","%s",shan);  //将"202011"赋给shan这个数组 
    3 printf("%s",shan);

    输出结果:202011

    2、sscanf("字符串内容",“%ns”,str);将“字符串内容”中的前n位赋给另一个字符数组str

    1 char shan[520];
    2 sscanf("202011","%4s",shan);  //将"2020"赋给shan这个数组 
    3 printf("%s",shan); 

    输出结果:2020

    3、sscanf("字符串内容",“%[^some]”,str);将“字符串内容”赋给另一个字符数组str,直到遇到some结束

    some:(1)如果是“0-9”,表示取遇到任意数字为止的字符串

                 (2)如果是“a-z”,表示取遇到任意小写字母为止的字符串,“A-Z”表示取遇到任意大写字母为止的字符串

    1 char shan[520];
    2 sscanf("202011ssty","%[^1]",shan);  //将"2020"赋给shan这个数组 
    3 printf("%s",shan);

    输出结果:2020
    1 char shan[520];
    2 sscanf("202011ssty","%[^a-z]",shan);  //将"202011"赋给shan这个数组 
    3 printf("%s",shan); 

    输出结果:202011
    1 char shan[520];
    2 sscanf("202011ssty","%[^A-Z]",shan);  //将"202011ssty"赋给shan这个数组 
    3 printf("%s",shan);

    输出结果:202011ssty

    4、sscanf("字符串内容",“%[some]”,str);将“字符串内容”中some的部分赋给str

    some:(1)如果是“0-9”表示只取数字部分赋给str

                 (2)如果是“a-z”表示只取小写字母部分赋给str,“A-Z”表示只取大写字母部分赋给str

                 (3)如果是“0-9a-z”表示取数字和小写字母部分赋给str,“0-9A-Z”表示取数字和大写字母部分赋给str

    1 char shan[520];
    2 sscanf("202011ssty","%[0-9]",shan);  //将"202011"赋给shan这个数组 
    3 printf("%s",shan); 

    输出结果:202011
    1 char shan[520];
    2 sscanf("202011ssty","%[0-9a-z]",shan);  //将"202011ssty"赋给shan这个数组 
    3 printf("%s",shan);

    输出结果:202011ssty
    1 char shan[520];
    2 sscanf("202011SSTY","%[0-9A-Z]",shan);  //将"202011SSTY"赋给shan这个数组 
    3 printf("%s",shan); 

    输出结果:202011SSTY

    注意:以下代码输出并不是“ssty”!因为字符串开始读就遇到了不可取的数字部分,那选取就直接结束了,并不会往后进行!

    1 char shan[520];
    2 sscanf("202011ssty","%[a-z]",shan);  
    3 printf("%s",shan); 

    输出结果:NULL(或一些莫名其妙的东西)

    5、sscanf("字符串内容",“%*[^some1]some1%[^some2]”,str);将“字符串内容”some1和some2之间的内容赋给str

    1 char shan[520];
    2 sscanf("2020/11@ssty","%*[^/]/%[^@]",shan);  //将"11"赋给shan这个数组 
    3 printf("%s",shan);

    输出结果:11

    6、sscanf("字符串内容",“%*s%s”,str);%s读取到空格结束,%*s则是把读取到的第一个字符串过滤掉(如下即过滤202011),保留第二个读取的字符串

    注意:如果“202011,ssty”逗号后面没有空格,则输出NULL(或一些莫名其妙的东西)

    1 char shan[520];
    2 sscanf("202011, ssty","%*s%s",shan);  //将"ssty"赋给shan这个数组(“202011, ssty”逗号后有一个空格) 
    3 printf("%s",shan); 

    输出结果:ssty

    7、sscanf("字符串1 字符串2 字符串3",“%s%s%s”,str1,str2,str3);将“字符串1”赋给str1,将“字符串2”赋给str2,将“字符串3”赋给str3

    1 char sh[520],an[1314],shan[5201314];
    2 int main() {
    3     sscanf("2020	11	ssty","%s%s%s",sh,an,shan);  
    4     printf("%s	%s	%s	",sh,an,shan); 
    5     return 0;
    6 }

    输出结果:2020 11 ssty

  • 相关阅读:
    全排列问题(内测第0届第1题)
    提取字符串中的数字(C语言)
    尾递归=递归+迭代?
    Android各版本代号、版本号、API/NDK级别、发布时间及市场份额
    C语言中文件打开模式(r/w/a/r+/w+/a+/rb/wb/ab/rb+/wb+/ab+)浅析
    sizeof既是关键字,又是运算符(操作符),但不是函数!
    探寻main函数的“标准”写法,以及获取main函数的参数、返回值
    Scala比较器:Ordered与Ordering
    【Python实战】Pandas:让你像写SQL一样做数据分析(一)
    【Python实战】Scrapy豌豆荚应用市场爬虫
  • 原文地址:https://www.cnblogs.com/Eleven-Qian-Shan/p/13043085.html
Copyright © 2020-2023  润新知