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

原文地址:https://www.cnblogs.com/Eleven-Qian-Shan/p/13043085.html