知識點
掃描集知識點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;
}