知识点
扫描集知识点copy自文末参考链接
使用“扫描集”(scanset)修饰符来读取字符串,它由方括号所包含的一串无序字符组成([scanset])。scanf()函数接着读取所有字符,然后将它们存储为一个字符串(带有字符串终止符),直到遇到不匹配扫描集中任一字符时才停止
char strNumber[32];
scanf( "%[0123456789]", strNumber );
如果用户输入 345X67,那么 scanf()会把 345\0 字符串存储到数组 strNumber 中。字符 X 以及后续字符则仍然留在输入缓冲区中。
逆向使用转换扫描集(也就是说,除扫描集中的字符外,其他都符合),做法是在扫描集的左括号后面加上一个插入号(^)。下面的 scanf()调用读取所有字符(包括空白符),直到句子结束的标点符号,然后再读入标点符号本身:
char ch, sentence[512];
scanf( "%511[^.!?]%c", sentence, &ch );
例题
codeforce
contest/273786/problem/I
I题 Dates
代码
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d", &n);
int x, y, z;
char ch1[2], ch2[2];
for(int i = 1; i <= n; i++)
{
scanf("%d%[./]%d%[./]%d", &x, ch1, &y, ch2, &z);
//printf("%s\n", ch1);
if(ch1[0] == '.')
{
printf("%.2d\.%.2d\.%.4d %.2d\/%.2d\/%.4d\n", x, y, z, y, x, z);
}
else
{
printf("%.2d\.%.2d\.%.4d %.2d\/%.2d\/%.4d\n", y, x, z, x, y, z);
}
}
return 0;
}