fgets、scanf存字符串应用

题目1

夺旗(英语:Capture the flag,简称 CTF)在计算机安全中是一种活动,当中会将“旗子”秘密地埋藏于有目的的易受攻击的程序或网站。参赛者从其他参赛者或主办方偷去旗子。

非常崇拜探姬的小学妹最近迷上了 CTF,学长给了她一个压缩包,让她找到其中的 flag 并提交。

她今天终于破解了压缩包的密码,但解压后她却发现,里面竟然有足足 100 个 txt 文件!她使用 Ctrl+F 大法搜索过后,发现了这些 txt 文件里面有着相同的规律:

每个 txt 文件中都藏着一个 flag,这些 flag 都有固定的格式,即 flag + 一个两位十进制数 + 真正的 flag 内容,其中这个两位十进制数代表 真正的 flag 内容 的长度。

例如,在 flag03ctf 中,flag 后的两位十进制数 03 表示 真正的 flag 内容 的长度为 3 个字符,此时 真正的 flag 内容 就是 ctf,所以你需要提交 flag{ctf}

小学妹苦于自己能力不足,于是她拜托你帮她找出文件中的 flag 

输入描述

先输入一行一个正整数 n (1≤n≤10^{5}),表示接下来字符串的长度。

然后输入一个长度为 n 的字符串 s,表示某个 txt 文件中的文本内容。

不保证给定的字符串 s 中只包含一个 flag 串,但你只需要输出你找到的第一个 flag 即可。

保证字符串 s 中不含空格,且第一个 flag 一定合法。

输出描述

输出一行一个字符串 t,表示破译出来的 flag,格式为 flag{真正的 flag 内容}(如样例所示)

样例输入 1

9
flag03ctf

样例输出 1

flag{ctf}

样例输入 2

25
tjjjctfctflag05hellozzuli

样例输出 2

flag{hello}

代码长度限制    16 KB

时间限制            1000 ms

内存限制            256 MB

栈限制                131072 KB

#include 
#include 
int main()
{
    int n;scanf("%d\n",&n);
    char str[n+1];//gcc申请n-4有的答案错误  clang没有
   // fgets(str,n+1,stdin);//中间必须是n+1 接收n个字符 
    //fgets可以存入回车符 用strlen不用加\0
    scanf("%s",str);//PTA申请str[n-4]个也全对   不存入回车符 不用加\0
    int num=0;
    for (int i=0;i

题目2

输入格式:

一个整数 x,用二进制表示。

输出格式:

一个整数, x×43 的二进制表示,注意不能包含前导零。

输入样例:

1

输出样例:

1000000

数据范围:

0≤n≤100,保证无前导零。

 代码:

#include 
#include 
#include 
int main()
{
    
    char x[101];int ans;
    fgets(x,101,stdin);
    //itoa(x,ans,2);无法识别??可能是Linux
    int len=strlen(x),i=0;
    while(x[i]=='0')i++;
    if(i==len)
    {
        printf("0");
        return 0;
    }
    while(i!=len)
    {
        if (x[i]=='0' || x[i]=='1')//防止输入中有回车符
        printf("%c",x[i]);
        i++;
    }
    printf("000000");
}

你可能感兴趣的:(c语言)