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语言格式化输入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值