有两个文件(QA,与QB)。 文件A是经过了字母映射加密的文本(将英文字母一一映射成了另一个), 文件B是字母映射的关系表(格式如A-c;B-R;…,其中前一个字母为加密前的),编写程序完成下列功能: (1)读取文件A中的内容,并将其保存在一个字符数组a中;读取文件B中的内容,并生成一个结构体数组b(结构体中有两个成员,分别是加密前和加密后的字母) (2)借助数组b,求出数组a中各元素在加密前所对应的字符,从而生成字符数组c,并将字符数组c的内容写入文件C中
文件A是经过了字母映射加密的文本(将英文字母一一映射成了另一个),
文件B是字母映射的关系表(格式如A-c;B-R;…,其中前一个字母为加密前的),编写程序完成下列功能:
(1)读取文件A中的内容,并将其保存在一个字符数组a中;读取文件B中的内容,并生成一个结构体数组b(结构体中有两个成员,分别是加密前和加密后的字母)
(2)借助数组b,求出数组a中各元素在加密前所对应的字符,从而生成字符数组c,并将字符数组c的内容写入文件C中
🚀第一步读取A中内容保存在数组a中
fileA = "Q3.A.txt";//打开文件要知道文件名 pf1 = fopen(fileA, "r");//打开文件A,以“r”的形式读取 if (pf1 == NULL) { perror("fopen");//判断是否打开失败 } while (!feof(pf1))//当pf1指向的文件里的内容读取没有结束 { a[lenA] = fgetc(pf1);//fgec用来将文件的内容读取到内存中 lenA++;//用lenA来记录读取的个数 } fclose(pf1);//读取完毕,关闭文件 a[lenA] = '\0';//最后再见文件中的'\0'加上。
第二步读取B中内容,以结构体形式保存
typedef struct secert//文件B中内容要求以结构体形式接收 { char pre;//加密前字符 char pos;//加密后字符 }Sec b[100];//重命名为Sec,并定义一个数组b fileB = "Q3.B.txt";//打开文件B,要知道文件B的名字 pf2 = fopen(fileB, "r");//以r的形式读取 if (pf2 == NULL) { perror("fopen");//判断是否为空 } while (!feof(pf2))//当pf2指向的文件没有内容时,读取结束 { fscanf(pf2, "%c %c", &b[lenB].pre, &b[lenB].pos);//fscanf是将文件里的内容读取到内存中,用法与scanf类似,只不过前面的参数多了个文件指针。 lenB++;//用lenB来记录读取的个数 } fclose(pf2);//关闭文件
第三步将数组a与加密前字母对比,将加密后的字符存入数组c中。
pf3 = fopen(ZQ3.C.txt", "wb");//打开文件,以wb的形式创建一个名字叫Q3的文件。 for (i = 0; i < lenA; i++) { flag = 0; for (j = 0; j < lenB; j++) { if (a[i] == b[j].pos)//让数组a中的字符与结构体中加密前的字符进行比较,如果相同则将加密后的字符放在数组c中,并将加密后的字符打印出来 { c[i] = b[j].pre; printf("%c", c[i]); fputc(c[i],pf3);//并将加密后的字符写入到文件C中 flag = 1; continue; } } if (flag = 0) { printf("%c", c[i]); fputc(c[i], pf3); } } fclose(pf3); }
完整代码:
typedef struct secert { char pre; char pos; }Sec; int main() { char a[100]; Sec b[100]; char c[100]; int lenA = 0; int lenB = 0; int i, j ,flag; char* fileA, * fileB; FILE* pf1, * pf2, * pf3; //打开文件A,要知道文件a的名字 fileA = "Q3.A.txt"; pf1 = fopen(fileA, "r"); if (pf1 == NULL) { perror("fopen"); } while (!feof(pf1)) { a[lenA] = fgetc(pf1); lenA++; } fclose(pf1); a[lenA] = '\0';*/ fileB = "Q3.B.txt"; pf2 = fopen(fileB, "r"); if (pf2 == NULL) { perror("fopen"); } while (!feof(pf2)) { fscanf(pf2, "%c %c", &b[lenB].pre, &b[lenB].pos); lenB++; } fclose(pf2);*/ pf3 = fopen("Q3.C.txt", "wb"); for (i = 0; i < lenA; i++) { flag = 0; for (j = 0; j < lenB; j++) { if (a[i] == b[j].pos) { c[i] = b[j].pre; printf("%c", c[i]); fputc(c[i],pf3); flag = 1; continue; } } if (flag = 0) { printf("%c", c[i]); fputc(c[i], pf3); } } fclose(pf3); return 0; }