C语言字符型数据(一)—简单的恺撒密码

2023-11-14

首先声明:这些内容主要是面向C语言的初学者,尤其是正在学习C语言的学生。

       学习C语言的字符型数据时,首先需要记住两条重要特性:1.字符型数据存储的是字符的ASCII码值;2. 由于ASCII码值本质上是一个整数,因此字符型数据可以像整数一样做加减运算。光记住这两条只能应付一些简单的考试题,要想利用字符型数据来解决一些实际的应用问题,还需要更多的练习。本文中的例子将结合文本文件的操作来增强对字符型数据的学习。

       文本文件中每个英语字符占一个字节,存储的也是字符的ASCII码值,因此对文本文件的操作,完全可以借助字符型数据来处理。从文本文件中读出的一个字符,可以存储在字符型变量里,然后按照应用需求对字符型变量进行处理,最后把该变量写回文本文件中去。

例1:用记事本编辑一个名为“original.txt”的文本文件,其中包含一段英语文本。现在要求编程序对该文件内容按照恺撒密码进行加密,加密后的内容保存到一个新文件 “result.txt” 中。 

       恺撒密码是一种古老的加密方法,是指把信息中的每一个字母用字母表中的该字母后的第三个字母代替,即a被d替换,b被e替换,…,z被c替换。假设从文件中读出的字符存放在字符型变量ch中,这种替换可以很容易的描述为:ch = ch + 3; 当ch + 3大于‘z’时,需要转回去从a再开始,因此需要减去26。为了简单起见,我们对非字母字符不做任何处理,原样输出。

       初学者可能对文件的打开和读写不太熟悉,我们在这里用freopen函数来简化对文件的操作,freopen函数可以将标准输入stdin(对应的是键盘)和标准输出stdout(对应的是显示器)分别重定向到输入文件和输出文件,也就说,本来从键盘输入数据,现在改为从输入文件读取数据,本来是向显示器输出数据,现在改为向输出文件输出数据。这样的好处是,可以直接使用scanf,getchar,printf和putchar函数读写文件数据。这也是程序设计竞赛中常用的读取测试数据的方法。

程序:

#include "stdio.h"
int main()
{
    char ch;
    freopen("original.txt","r",stdin) ; //输入输出被分别重定向到两个文件。
    freopen("result.txt","w",stdout);
    ch=getchar();
    while(ch!=EOF)    //EOF指文件的末尾
    {
        if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')
        {
            ch=ch+3;
            if(ch>'z'||(ch>'Z'&&ch<='Z'+3))
                ch= ch-26;
        }               
        printf("%c",ch);
        ch = getchar();
    }
    return 0;
}

  图1显示的是original.txt文件中的内容,图2显示的是加密处理后的内容。

                                                                                       图1. original.txt文件

                                                                                       图2. result.txt文件

       可能很多初学C语言的同学在学习字符型数据时,还没有学习条件语句、循环语句以及文件的读写,因为大多数教材的编排顺序往往先是数据类型,然后才是控制语句,文件通常是放在最后一章的。如果完全按照教材按部就班,学的知识点会比较零散,难以形成一个整体。因此,我建议老师在教前面的知识时,在例子程序中可以适当地将后面的内容加进来一些,对于没学到的知识点,老师稍作讲解,学生大体是可以明白的,有兴趣的同学也可以提前自学后面的内容。这样有利于学生将多个知识点在脑海中串成一个整体。

       回到上面的文本文件操作问题,有些学生可能会有疑问,如果文件的内容不是英文,而是汉字呢,能用相同的方法读取并处理汉字吗?下一篇文章中我们将把字符型数据的学习扩充到对汉字的简单处理。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言字符型数据(一)—简单的恺撒密码 的相关文章

随机推荐

  • Apache下两个HttpClient的区(org.apache.commons.httpclient.HttpClient,org.apache.http.client.HttpClient)

    在我们使用java来模拟提交时经常会用到HttpClient类 但是会发现在Apache下有两个包下有此类 1 org apache commons httpclient HttpClient 2 org apache http clien
  • 数学图形之单叶双曲面

    双曲线绕其对称轴旋转而生成的曲面即为双曲面 在数学里 双曲面是一种二次曲面 其中单叶双曲面可以用公式表达为 x 2 a 2 y 2 b 2 z 2 c 2 1 在现实中 许多发电厂的冷却塔结构是单叶双曲面形状 由于单叶双曲面是一种双重直纹曲
  • java web——servlet+jsp实现前后台交互

    大学生涯终于结束 在公司学习了一段时间的java web方面的知识 结合自己之前的一些理解 想通过几篇文章来对我所接触到的java技术进行梳理与总结 也希望能给大家一些参考 由于作者水平有限 难免存在一些不足之处 希望能一起探讨 1 ser
  • 解决pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool

    解决pip vendor urllib3 exceptions ReadTimeoutError HTTPSConnectionPool host files pythonhosted org port 443 Read timed out
  • MySQL JSON数据类型

    一 JSON数据类型 JSON JavaScript Object Notation 主要用于互联网应用服务之间的数据交换 MySQL 支持JSON 对象和JSON 数组两种类型 JSON 类型是从 MySQL 5 7 版本开始支持的功能
  • Flutter点击事件实现

    GestureDetector 1 创建自定义button类 2 在其中使用GestureDetector并复写onTap回调 参考 https flutter io cookbook gestures handling taps impo
  • 家族企业的优势、劣势分析

    家族企业优势 1 创业时期 凭借家族成员之间特有的血缘关系 类似血缘关系 亲缘关系和相关的社会网络资源 以较低的成本迅速集聚人才 全情投入 团结奋斗 甚至可以不计报酬 能够在很短的一个时期内获得竞争优势 较快的完成原始资本的积累 2 反应迅
  • 对大数据的理解

    大数据几个不同的定义 James Kobielus 大数据事实上是引用极限可扩展分析的概念 极限可扩展分析 这个词在我看来是人们所说大数据的核心 在某种程度上 是可以用三个V来概括的 Volume 数据量 可以使TB可以是PB甚至更大 Ve
  • 漏洞扫描工具AWVS介绍及安装教程

    1 AWVS简介 AWVS Acunetix Web Vulnerability Scanner 是一款知名的网络漏洞扫描工具 通过网络爬虫测试网站安全 检测流行的Web应用攻击 如跨站脚本 sql 注入等 据统计 75 的互联网攻击目标是
  • 如何破解Studio 3T (MongoDB可视化工具)

    首先新建一个记事本 写入如下内容 echo off ECHO 重置Studio 3T的使用日期 FOR f tokens 1 2 i IN reg query HKEY CURRENT USER Software JavaSoft Pref
  • MOS管漏电流产生的原因

    功耗是由漏电流引起的 尤其是在较低阈值电压下 了解MOS晶体管漏电流的六种不同原因 1 反向偏置pn结泄漏电流 在晶体管操作期间 MOS晶体管的漏极 源极和衬底结被反向偏置 因此 器件的漏电流被反向偏置 这种漏电流可能是由反向偏置区域中的少
  • windows自带磁盘修复命令chkdsk的使用方法

    在电脑使用过程会因突然断电或者是非正常关机等原因导致磁盘受损 这里介绍Windows系统自带chkdsk命令修复硬盘 2022 10 26补充 专业硬盘维修的朋友告诉我此命令不要随意使用 尤其硬盘已经有坏道 用该方法可能导致更严重的问题 大
  • python数据抓取中空格的影响

    在python数据抓取中 多一个空格或少一个空格 中间的差异的很大的 抓取一个网站 在定位后 只抓取前五行 无意中多了一个空格 数据一直不能正常显示 经过调试后 将空格去掉 定位的数据正常显示 如下
  • Matplotlib基本参数设置

    文章目录 Matplotlib基本参数设置 1 添加图标题 坐标轴标题 图例 2 添加坐标轴范围 画布网格 3 添加图形标注 4 改变横坐标和纵坐标上的刻度 ticks 5 中文支持相关设置 6 定义图形样式 Matplotlib基本参数设
  • python3集成matplotlib画图中文乱码的解决方法

    问题描述 在python中使用matplotlib画图 里面的中文会显示乱码方块 解决方法前提依赖 这是由于matplotlib默认使用的字体中不包含中文字符引起的 可以通过将中文字符加入到默认字体中解决 前提 查找本地都有哪些中文字体 打
  • 利用机器学习进行恶意代码分类

    原文链接 http drops wooyun org tips 8151 最近在Kaggle上微软发起了一个恶意代码分类的比赛 并提供了超过500G的数据 解压后 有意思的是 取得第一名的队伍三个人都不是搞安全出身的 所采用的方法与我们常见
  • IOC与DI总结

    编写流程 基于XML 导入jar包 4 1 gt beans core context expression commons logging 编写目标类 dao和service spring配置文件 IoC
  • Flutter获取屏幕及设备信息

    获取状态栏高度 import dart ui MediaQueryData fromWindow window padding top MediaQuery of context padding top 获取系统默认的AppBar等高度 位
  • web前端技术练习题

    选择题 1 以下哪个不属于Web前端开发的核心技术 A HTML C JavaScript B CSS D Java 2 关于HTML说法错误的是 A HTML标签的嵌套结构可以描述成一个网状结构 B 在 title 和 title 标签之
  • C语言字符型数据(一)—简单的恺撒密码

    首先声明 这些内容主要是面向C语言的初学者 尤其是正在学习C语言的学生 学习C语言的字符型数据时 首先需要记住两条重要特性 1 字符型数据存储的是字符的ASCII码值 2 由于ASCII码值本质上是一个整数 因此字符型数据可以像整数一样做加