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