ASCII码参照表

ASCII码参照表

ASCII

ASCII(American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符

Question.1 不同字符

给定一个长度为|S|的字符串S,S中仅包含大小写字母和数字,请计算出S中有多少种不同的字符

#include <stdio.h>
#include <string.h>
int main()
{
    int count = 0;
    int arr_c[123] = {};
    char arr[1000000];
    gets(arr);
    int arr_s=strlen(arr);
    for(int i = 0;i<arr_s;i++)
    {
        int t =(int)(arr[i]);
        arr_c[t] = -1;
    }
    for(int j = 48;j<123;j++)
    {
        if(arr_c[j]==-1) count++;
    }
    printf("%d",count);
}
//AZ 65 -90
//az 97 -122
//09 48 -57

Question.2 解密题

解密题.png

#include <stdio.h>
#include <string.h>
int main()
{
    int k1 = 0,k2 = 0;
    scanf("%d %d",&k1,&k2);
    getchar();
    char a[1024] = {};
    gets(a);
    int arr_s = strlen(a);
    for(int i = 0;i<arr_s;i++)
    {
        if(a[i]>='A' && a[i]<='Z')
        {
            a[i] = a[i] - 'A';
            for(int x=0;x<26;x++)
            {
            if(a[i] == (k1*x+k2)%26)
              a[i] = x + 'A';
            }
        }
        if(a[i]>='a' && a[i]<='z')
        {
            a[i] = a[i] - 'a';
            for(int x=0;x<26;x++)
            {
            if(a[i] == (k1*x +k2 )% 26)
              a[i] = x + 'a';
            }   
        }
    }
    puts(a);
}

解析思考

两道题中皆通过ASCII码,实现了对数字、字符的表达。每个char字符都可以通过加减运算找到其在各种环境下对应的位置。在字符题中,通过识别ASCII码对应的十进制数字位置,并对数组标记,实现了统计字母和数字两类符号是否出现过,同理,如果有其他符号,也可以实现。在解谜题中,通过加减运算,还原字母所对应的数字,再通过计算后还原完成解题。

最后修改:2022 年 10 月 29 日
如果觉得我的文章对你有用,只需评论或转发支持,谢绝投喂!