【问题描述】有一种加密方法为:其使用一个字母串(可以含重复字母,字母个数不超过50)作为密钥。假定密钥单词串为feather,则先去掉密钥单词中的重复字母得到单词串feathr,然后再将字母表中的其它字母以反序追加到feathr的后面:
f e a t h r z y x w v u s q p o n m l k j i g d c b
加密字母的对应关系如下:
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
f e a t h r z y x w v u s q p o n m l k j i g d c b
其中第一行为原始英文字母,第二行为对应加密字母。其它字符不进行加密。编写一个程序,用这种密码加密文件。假定要加密的文件名为encrypt.txt及加密后的文件名为output.txt,并假定输入文件中字母全为小写字母,并且输入密钥也全为小写字母。
【输入形式】从标准输入中输入密钥串,并从文件encrypt.txt中读入要加密的内容。
【输出形式】加密后结果输出到文件output.txt中。
【样例输入】
feather
和文件encrypt.txt中内容,例如被加密的文件encrypt.txt中内容为:
c language is wonderful.
【样例输出】加密后output.txt文件中内容为:
a ufqzjfzh xl gpqthmrju.
【样例说明】首先将给定的密钥单词去除重复字母,然后按照上面的加密对应表对encrypt.txt文件内容进行加密即可得到加密后的文件,其中只对英文字母进行加密对换,并且假设encrypt.txt中的英文字母全是小写字母。
上面是测试结果与加解密过程。
没有做文件读写操作,自己补,实在不会去抄教材。将输入文件内容循环读到一个字符数组,然后对该数组内容进行加密,再将加密结果写入输出文件,循环操作直至输入文件读取完成,关闭文件即可。
分析问题:下面给出从一个文件中读取单词的函数int getword(FILE * ptr,char *word)
调用方法:
在main()中先定义一个分配好空间的字符串char str[MAXSIZE]
打开文件FILE * IN=fopen("encrypt.txt","r");
getword(IN,str),会读入文件中的一个完整的单词到word里面,如果getword()返回EOF,则说明已经读完了所有的单词
#include<stdio.h>
#include<ctype.h>
void getword(FILE * ptr, char * word)
{
char c;
while(!isalpha(c=fgetc(ptr)))
if(c==EOF)
return EOF;
do
{
*word++=c;
} while (c=fgetc(ptr));
*word='\0';
return 1;
}
如果这个回答能够帮助到你,能够关#注一下🐎
本回答被网友采纳C语言,文件读取部分的,不会,求各位大佬帮帮忙
没有做文件读写操作,自己补,实在不会去抄教材。将输入文件内容循环读到一个字符数组,然后对该数组内容进行加密,再将加密结果写入输出文件,循环操作直至输入文件读取完成,关闭文件即可。
c语言问题,求大佬帮忙
include "stdafx.h"include <stdio.h> define Sever_type 3 define Oil_type 4 int oil_type;int serve_type;double ALL_Price;struct OIL { char *type;double price;};struct SERVES { char *type;double reduce;};OIL oil[4]={ {"90号汽油",6.95},{"93号汽油",7.44},{"97号汽油...
C语言编程题读取时间求助,谢大佬了!
字符转整形的简单应用,使用到头文件 math.h。例如:void TimeGet(const MYTIME *time, int *hour, int *minute, int *second){ hourt = atoi(&time->hour);minute= atoi(&time->minute);second= atoi(&time->second);}
C语言 大佬们 帮帮忙
include <stdio.h>#define MAXS 15void StringCount(char s[]);void ReadString(char s[]);int main(){char s[MAXS];ReadString(s);StringCount(s);return 0;}void StringCount(char s[]){int letter = 0, blank = 0, digit = 0, other = 0;char ch;while (*s != '\\0') {i...
c语言大佬们帮帮忙,这两个循环怎么输出不一样
第一个为:从终端读取无符号长整形,读取成功,scanf返回1,否者返回0.while(条件);当条件为真的时候执行while语句。所以输入数字都为读取成功,返回1,1==1为真,执行while,当输入q时,读取失败,返回0,0==1为假,退出while。第二个为:从终端读整形,读取成功,scanf返回1,否者返回0.所以...
这个c语言题目有点难,求大佬帮忙
您说的这个问题,难点就在正确使用\/和%这两个符号。c语言中%只能使用在两个整数之间,且得到的结果也只能是整数,表示的是将前者除以后者后得到的余数,所以叫取余符号。\/表示除号,但是用在两个整数之间时,得到的结果也只能是整数。比如1\/2的结果是0,1%2的结果是1。根据以上说明,千位和各位应该...
c语言 无法解析的外部符号 大佬帮帮忙
这是链接器报出的错误,初学者常见于以下几种情况 1,没写main函数,或者拼写错了,比如mian 2,建立控制台程序(黑窗口)应实现main函数,建立windows GUI程序,应实现winMain函数,初学者往往出现建立工程类型错误的情况,比如错误的创建了图...
c语言问题,麻烦大佬帮忙看看
x是输出十六进制数的意思,故题目需要你进行十六进制运算,不过是把十六进制的194与十进制的18相加而已,可以统一转换进制为十六进制,然后运算,不需要进位。运算过程是:0x194+18==0x194+0x12 而 0x194+0x12==0x1A6。下面的watch框是验算
求C语言编程大佬帮忙!这道题的逻辑哪里出错了!找了几个小时了没搞明白...
思路如下:这个问题实际上是生成0~9的全排列,然后根据每个数在格子里的位置判断每个排列是否符合要求。百度了一个全排列算法稍做修改,得到以下代码,输出的有效方案数是1580,在我这里输出大约在70ms到100ms左右。百度这个代码排版垃圾得无以复加,vs里面排得好好复制过来全乱,不再重排了。另外,生成...
哪位大佬帮帮忙啊,这个C语言怎么做
第一次判断,z为3,x为1,满足条件。于是z变为2、y变为4;第二次判断,z为2,x为2,满足条件。于是z变为1、y变为3;第三次判断,z为1,x为3,满足条件。于是z变为0、y变为2;第四次判断,z为0,不满足条件。z变为-1。打印输出结果,3、2、-1....