当前位置: 首页 > news >正文

pset2 substitution.c

1.extension:To Do Tasks

  1. 推荐一个vscode里面一个很好用的插件!!!写出解决的步骤,不但理清楚思路。还可以提高效率!
  2. 特别是针对一些文本比较长的pset,要求多且零碎,好像在做阅读理解>< 而且反复切换页面(浏览器到vscode)就有点太累了,而且截图固定的话,整个页面也看着不舒服,太乱了,所以这个插件可以节省时间。
  3. 把pset页面的的长文本要求先复制到创建好的new.todo 里面,快速进行删减,直到看到关键信息,然后分段小标题head1…,每个小标题下是需要一些小任务:就初步成形~
  4. 在初步成形的小任务后面可以写出解决的步骤(或者你不确定也没有关系),有一些必要的步骤可以先开始试试看,一步一步的,每次做完@done都有一个时间,你会有慢慢的有成就感,所以说,把可以解决的先解决,最后自然就出来了。
  5. 其实写的时间不长,但是中间小错误需要调试的点很多,有时候都不知道在哪,所以说不要太盯着结果了,耐心的去找过程,这个时候找到错误的速度就会出奇的快!Unbelievable!好像有点理解过程比结果更重要了><

在这里插入图片描述
使用方法:首先的话,是先创建new.todo文件,然后就是一些快捷键,如下图,还是比较好上手哒!
在这里插入图片描述pset2例子:
在这里插入图片描述

2 code

#include <cs50.h>   //for get_sting
#include <ctype.h>  //for tolower
#include <stdio.h>  //for printf
#include <stdlib.h> //for malloc
#include <string.h> //for strlen
int main(int argc, string argv[])
{// 1 command-line argumentif (argc != 2){printf("./substitution key\n");return 1;}/*2 check if valid keyget the user input:argv[1]* contain 26 digits of characters purely :isapha()* no matter is uppercase or lowercase* A -Z:65-90 a-z:97-122* a letter in the key can only show once:frequency(every letter) == 1* if not ,printf message and return 1*/size_t length = strlen(argv[1]);if (length != 26){printf("Key need to contain 26 letters!\n");return 1;}int *frequency = (int *) calloc(length, sizeof(int));if (frequency == NULL) {printf("failed to allocate memory");return 1;}for (int i = 0; i < length; i++){if (!isalpha(argv[1][i])){printf("Key must be purely alphabetically!\n");return 1;}argv[1][i] = tolower(argv[1][i]);char ch = argv[1][i];frequency[(int) ch - 97]++;// printf("count: %d\n", frequency[(int)ch - 97]);if (frequency[(int) ch - 97] != 1){printf("The letters in key can not repeated!\n");return 1;}}// store the keystring key = malloc(length + 1);if (key == NULL){printf("failed to allocate memory\n");return 1;}for (int k = 0; k < length; k++){key[k] = argv[1][k];}// 3 get the plaintextstring s = get_string("Plaintext: ");// printf("plaintext: %s\n", s);/*4 output text* calculate the length of s* allocate new memory* convert new[]:This 26-character key means thatA (the first letter of the alphabet)should be converted into N (the first character of the key)...key:NQXPOMAFTRHLZGECYJIUWSKDVB key[position] = 'H'-> positionalp:ABCDEFGHIJKLMNOPQRSTUVWXYZexample:HELLO --> FOLLE new[i] = key[int(s[i]) - 97]tolower-alpha:A B C D E F G H I J K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z-97index:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25*/size_t s_length = strlen(s);string new = malloc(strlen(s) + 1);if (new == NULL){printf("failed to allocate memory");return 1;}printf("ciphertext:");for (int j = 0; j < s_length; j++){// keep the formatif (isupper(s[j])){new[j] = toupper(key[s[j] - 65]);}else if (islower(s[j])){new[j] = tolower(key[s[j] - 97]);}else{new[j] = s[j];}printf("%c", new[j]);}printf("\n");free(frequency);free(key);free(new);return 0;
}

3 check:

:) substitution.c exists
:) substitution.c compiles
:) encrypts "A" as "Z" using ZYXWVUTSRQPONMLKJIHGFEDCBA as key
:) encrypts "a" as "z" using ZYXWVUTSRQPONMLKJIHGFEDCBA as key
:) encrypts "ABC" as "NJQ" using NJQSUYBRXMOPFTHZVAWCGILKED as key
:) encrypts "XyZ" as "KeD" using NJQSUYBRXMOPFTHZVAWCGILKED as key
:) encrypts "This is CS50" as "Cbah ah KH50" using YUKFRNLBAVMWZTEOGXHCIPJSQD as key
:) encrypts "This is CS50" as "Cbah ah KH50" using yukfrnlbavmwzteogxhcipjsqd as key
:) encrypts "This is CS50" as "Cbah ah KH50" using YUKFRNLBAVMWZteogxhcipjsqd as key
:) encrypts all alphabetic characters using DWUSXNPQKEGCZFJBTLYROHIAVM as key
:) does not encrypt non-alphabetical characters using DWUSXNPQKEGCZFJBTLYROHIAVM as key
:) handles lack of key
:) handles too many arguments
:) handles invalid key length
:) handles invalid characters in key
:) handles duplicate characters in uppercase key
:) handles duplicate characters in lowercase key
:) handles multiple duplicate characters in key

http://www.mrgr.cn/news/79121.html

相关文章:

  • 《剪映5.9官方安装包》免费自动生成字幕
  • HarmonyOS简介:应用开发的机遇、挑战和趋势
  • QT:子控件VLC播放视频时,父控件无法截取鼠标事件
  • vim如何显示行号
  • 在一个sql select中作多个sum并分组
  • ESP32,uart安装驱动uart_driver_install函数剖析,以及intr_alloc_flags 参数的意义
  • Linux内核__setup 宏的作用及分析
  • [go-redis]客户端的创建与配置说明
  • ansible自动化运维(二)ad-hoc模式
  • 网络层总结
  • 基于TensorFlow框架的线性回归实现
  • AI处理器组合--华为OD机试2024年E卷
  • 两个畸变矩阵相乘后还是一个2*2的矩阵,有四个畸变元素。1、畸变矩阵吸收了法拉第矩阵。2、畸变矩阵也给法拉第旋转角带来模糊(求解有多种可能)
  • Scala:正则表达式
  • Transformers在计算机视觉领域中的应用【第3篇:Swin Transformer——多层次的Vision Transformer】
  • 快速上手 RabbitMQ:使用 Docker 轻松搭建消息队列系统
  • JS中的浅拷贝,深拷贝和引用
  • 【JuMP.jl】非线性规划
  • 项目开发之Jenkins
  • React第十二节组件之间通讯之发布订阅模式(使用pubsub-js插件)
  • FFmpeg:强大的音视频处理工具指南
  • 鸿蒙 Next 可兼容运行 Android App,还支持出海 GMS?
  • 每日速记10道java面试题13
  • 365天深度学习训练营-第P7周:马铃薯病害识别(VGG-16复现)
  • 知乎大数据开发面试题及参考答案
  • AI大模型原理