C/C++ 格式化輸入 掃描集

知識點

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

參考來源

C語言格式化輸入

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章