scanf在竞赛中的技巧总结ing
前言
当输入流是一个字符串,我们需要在其中提取我们所需要的数值时,我们可以在读入阶段就完成数据的筛选工作。
使用方法
- scanf("%ns", str);
表示读取长度为n的字符串
输入:123456
输出str:123 ( 以scanf("%3s", str);为例 )
- scanf("%[a-z]", str);
表示读取a-z的小写字母,出现非a-z的小写字母,立即停止读取。
输入:abcd123
输出str:abcd
- scanf("%*[a-z]%s", str);
%*[ ]表示过滤掉满足括号内条件的字符串 %[ ]表示读取
输入:abcd123
输出str:123
- scanf("%[^0-9]", str);
^表示非,^0-9表示非0-9的一切字符,因此是遇到0-9就立即停止读取。
输入:abcd123
输出str:abcd
PS:%[^\n] 表示 读取回车符以前的所有字符,常用于读取含空格的字符串。
%[^ ] 表示 读取空格符以前的所有字符。
- scanf("%*[^\n]%d", &num);
表示过滤掉回车以前所有的字符,并将回车符的下一个数字赋给num。
输入:abcd\n12
输出num:12
PS:%*[^ ]表示过滤空格以前的所有字符
- scanf("%nd", &num);
表示读入一个n位数字,储存在num中
输入12314 scanf("%3d", &num);
输出num : 123