自学内容网 自学内容网

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 <stdio.h>
#include <string.h>
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<n+1;i++)
    {
        if (str[i]=='f' && str[i+1] == 'l' && str[i+2]=='a' && str[i+3]=='g')
        {
            
            num = (str[i+4]-'0')*10 + str[i+5]-'0';
            int top=0;
            for (int j=i+6;j<num+i+6;j++)
                str[top++] = str[j];
            break;
        }
    }
    printf("flag{");//,strlen(str)两个都一样申请少空间也会按照n+1打印
    for (int i=0;i<num;i++)
        printf("%c",str[i]);
    printf("}\n");
}

题目2

输入格式:

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

输出格式:

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

输入样例:

1

输出样例:

1000000

数据范围:

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

 代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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");
}


原文地址:https://blog.csdn.net/zhangshuangrui/article/details/145249844

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!