C语言-详细讲解-字符串加密

1.题目要求

编写加密程序,将用户输入的一个英文句子加密为加密字符串,然后输出加密字符串。假设句子长度不超过50个字符。根据给定的句子加密函数原型SentenceEncoding,编写函数SentenceEncoding调用字符加密函数CharEncoding完成句子加密。然后,编写主程序提示用户输入英文句子,然后调用函数SentenceEncoding对句子加密,最后输出加密后的句子。字符加密规则为大写字母和小写字母均加密为其补码, 我们定义ASCII码值相加为’A’+’Z’即155的两个大写字母互为补码,ASCII码值相加为’a’+’z’即219的两个小写字母互为补码。空格用@代替,句号以#代替,其它字符用句点代替。
函数原型:
void SentenceEncoding(char *soure,char *code);
功能:对待加密字符串source加密后保存加密字符串到code.
参数:char *soure,指向待加密句子的字符串指针;char *code 指向加密字符串的字符串指针;
输入提示信息:"Input source sentence:"
输出提示信息:"Encoded sentence:"
输出加密字符串后,输出一个回车。运行实例1:
Input source sentence:You are a student.
Encoded sentence:Blf@ziv@z@hgfwvmg#

2.代码实现 

#include<stdio.h>
#include<string.h>// 字符加密函数
char CharEncoding(char ch)
{char encode = 0;if (ch >= 'A' && ch <= 'Z')     {encode = ('A' + 'Z') - ch;     }else if (ch >= 'a' && ch <= 'z')  {encode = 'a' + 'z' - ch;    }else{switch (ch)   {case ' ': encode = '@';     break;                  case '.': encode = '#';   break;default: encode = '.';    break;}}return encode;
}// 句子加密函数
void SentenceEncoding(char *source, char *code)
{while (*source!= '\0'){*code = CharEncoding(*source);source++;code++;}*code = '\0'; // 给加密后的字符串添加结束符
}int main()
{// 输入提示信息printf("Input source sentence:");char ch[80];// 使用 fgets 避免缓冲区溢出fgets(ch, sizeof(ch), stdin);ch[strcspn(ch, "\n")] = '\0';char code[80];// 输出提示信息printf("Encoded sentence:");SentenceEncoding(ch, code);puts(code);printf("\n");return 0;
}

3.代码详解

CharEncoding 函数:

  • 如果 ch 是大写字母(A 到 Z),通过 encode = ('A' + 'Z') - ch 计算其补码。
  • 如果 ch 是小写字母(a 到 z),通过 encode = 'a' + 'z' - ch 计算其补码。

SentenceEncoding 函数:

  • 使用 while (*source!= '\0') 循环,只要 source 指针未指向字符串结尾,就调用 CharEncoding 函数对当前字符进行加密,并将结果存储在 code 指针所指向的位置。
  • 同时,将 source 指针和 code 指针向后移动一位,继续处理下一个字符。
  • 最后添加字符串结束符 '\0' 到加密后的字符串末尾。

处理多余的换行符:

  • strcspn 是 C 标准库中的一个函数,其函数原型为 size_t strcspn(const char *str1, const char *str2);
    • 它的作用是计算 str1 中从起始位置开始,连续的字符都不在 str2 中出现的字符的长度。
    • 当 str2 是 "\n" 时,strcspn(ch, "\n") 会计算 ch 中从起始位置开始,连续的字符中不包含换行符 '\n' 的字符的长度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/65531.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stratovirt

title: 探索 Stratovirt&#xff1a;云时代的虚拟化新力量 date: ‘2024-12-29’ category: blog tags: Stratovirt云计算虚拟化技术技术解析 sig: Stratovirt archives: ‘2024-12’ author:way_back summary: Stratovirt 作为新兴的虚拟化技术&#xff0c;以其独特的架构和先…

一文复盘:RAG技术-大模型

原文&#xff1a;https://zhuanlan.zhihu.com/p/13962398269 RAG&#xff08;Retrieval-Augmented Generation&#xff09;之所以被关注&#xff0c;有两方面原因&#xff1a; 1、没有跑大模型的资源&#xff1a;大多数人没有GPU集群搞LLM的预训练。 2、大模型缺乏知识&…

使用 OpenCV 绘制线条和矩形

OpenCV 是一个功能强大的计算机视觉库&#xff0c;它不仅提供了丰富的图像处理功能&#xff0c;还支持图像的绘制。绘制简单的几何图形&#xff08;如线条和矩形&#xff09;是 OpenCV 中常见的操作。在本篇文章中&#xff0c;我们将介绍如何使用 OpenCV 在图像上绘制线条和矩形…

WinForm 美化秘籍:轻松实现 Panel 圆角虚线边框

文章目录 1、引言2、案例实现1、创建自定义 Panel 类2、定义圆角矩形3. 使用自定义 Panel4. 调整属性5、使用背景图片来实现5、拓展&#xff1a;使用 Panel 的 Paint重绘单独实现虚线边框效果 3、实现效果4、总结 1、引言 在 Winform 应用程序开发中&#xff0c;美化用户界面&…

Spring Cloud LoadBalancer (负载均衡)

目录 什么是负载均衡 服务端负载均衡 客户端负载均衡 Spring Cloud LoadBalancer快速上手 启动多个product-service实例 测试负载均衡 负载均衡策略 自定义负载均衡策略 什么是负载均衡 负载均衡(Load Balance&#xff0c;简称 LB) , 是高并发, 高可用系统必不可少的关…

OpenCloudOS简介

OpenCloudOS是一款开源的云操作系统&#xff0c;具有诸多特性和优势&#xff0c;广泛应用于多个领域。 一、项目背景 开源社区发起&#xff1a;由操作系统、云平台、软硬件厂商与个人共同倡议发起的操作系统社区项目&#xff0c;旨在打造全面中立、开放、安全、稳定易用、高…

NLP 中文拼写检测纠正论文 Automatic-Corpus-Generation

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法&#xff0c;如果提升 100W 倍的性能&#xff1f; NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正&#xff1f;可我只会写 CRUD 啊&#xff01; 一个提升英文单词拼…

区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】

区块链安全常见的攻击分析——不安全调用漏洞 Unsafe Call Vulnerability 区块链安全常见的攻击合约和简单复现&#xff0c;附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】1.1 漏洞合约1.2 漏洞分析1.3 攻击步骤分析1.4 攻击合约 区块链安全常见的攻击合约和…

生成excel文件(有备注和表头的情况)

要使用 Java 导出 Excel 文件&#xff0c;并且通过 ExcelProperty 注解进行列的映射&#xff0c;可以利用 EasyExcel 库。EasyExcel 是阿里巴巴开源的一款高性能 Excel 读写工具&#xff0c;它支持通过注解将类与 Excel 的列进行映射&#xff0c;简化了 Excel 操作的复杂性。 …

Excel 面试 01 “Highlight in red the 10 lowest orders”

要在 Excel 中完成“Highlight in red the 10 lowest orders”的任务&#xff0c;可以使用条件格式&#xff08;Conditional Formatting&#xff09;。以下是详细步骤&#xff1a; 步骤 1&#xff1a;选择数据范围 打开包含订单数据的工作表。选中包含订单金额或数量的单元格范…

留学生交流互动系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

Junit如何禁用指定测试类,及使用场景

在JUnit中禁用指定测试类可以通过多种方式实现&#xff0c;具体取决于使用的JUnit版本&#xff08;JUnit 4 或 JUnit 5&#xff09;。以下是针对两个版本的详细说明以及它们可能的使用场景&#xff1a; JUnit 4 禁用整个测试类 可以使用Ignore注解来忽略整个测试类。这将导致…

算法基础一:冒泡排序

一、冒泡排序 1、定义 冒泡排序&#xff08;英语&#xff1a;Bubble Sort&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序&#xff08;如从大到小、首字母从A到Z&#xff09;错误就把他们交换过来。 …

Spark大数据开发与应用案例(视频教学版)(一)

作者&#xff1a;余辉 简介&#xff1a;余辉&#xff0c;硕士毕业于中科院&#xff0c;从事IT行业12年。专注于大数据和机器学习。在数据团队担任过的角色&#xff1a;研发、架构师、负责人、讲师。数据知识产权&#xff1a;出版大数据书籍【1】本&#xff0c;论文【2】篇&…

跨域请求问题

跨域请求简介 跨域请求&#xff1a;通过一个域的JavaScript脚本和另外一个域的内容进行交互 域的信息&#xff1a;协议、域名、端口号 同域&#xff1a;当两个域的协议、域名、端口号均相同 如下所示&#xff1a; 同源【域】策略&#xff1a;在浏览器中存在一种安全策略就是…

探索开源项目 kernel:技术的基石与无限可能

在开源的广袤世界中&#xff0c;有一颗璀璨的明星——kernel&#xff08;https://gitee.com/openeuler/kernel&#xff09;&#xff0c;它宛如一座技术的宝藏&#xff0c;蕴含着无数的智慧与创新&#xff0c;为众多开发者所瞩目和敬仰。 一、初窥 kernel 项目 当我第一次接触…

Spring Boot Actuator、Spring Boot Actuator使用、Spring Boot Actuator 监控、Spring程序监控

SpringBoot四大核心之actuator——程序监控器 1. 添加 Spring Boot Actuator 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 2. 配置 …

C++“STL之String”

​ &#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;C入门 目录 ​编辑 前言 一、STL简介 1.1 STL是什么&#xff1f; 1.2 STL的版本&#xff08;这个不是很重要了解即可&#xff09; 1.3 STL的六大组件 二…

语言模型评价指标

1. BLEU&#xff08;Bilingual Evaluation Understudy&#xff09; 目标&#xff1a;衡量生成文本和参考文本之间的词汇相似性。 计算步骤&#xff1a; N-gram 匹配&#xff1a; 将生成文本和参考文本分解成 1-gram、2-gram、…、N-gram&#xff08;通常取到 4-gram&#xff…