【C语言】实现文件内容映射转移

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 借助数组b,求出数组a中各元素在加密前所对应的字符,从而生成字符数组c,并将字符数组c的内容写入文件C中

有两个文件(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;
}
相关文章
|
2天前
|
人工智能 C语言
|
1月前
|
存储 小程序 C语言
【C语言程序设计——文件】文件操作(头歌实践教学平台习题)【合集】
本文介绍了C语言中的文件操作,分为两个关卡。第1关任务是将键盘输入的字符(以#结束)存入`file1.txt`并显示输出;第2关任务是从键盘输入若干行文本(每行不超过80个字符,用-1作为结束标志),写入`file2.txt`后再读取并显示。文中详细讲解了文件的打开、读取(使用`fgetc()`和`fgets()`)、写入(使用`fputc()`和`fputs()`)及关闭操作,并提供了示例代码和测试说明。
43 5
|
3月前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
88 6
|
3月前
|
算法 C语言
C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项
本文深入讲解了C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项,通过实例演示了文件操作的基本流程,帮助读者掌握这一重要技能,提升程序开发能力。
216 3
|
4月前
|
存储 编译器 C语言
如何在 C 语言中判断文件缓冲区是否需要刷新?
在C语言中,可以通过检查文件流的内部状态或使用`fflush`函数尝试刷新缓冲区来判断文件缓冲区是否需要刷新。通常,当缓冲区满、遇到换行符或显式调用`fflush`时,缓冲区会自动刷新。
|
4月前
|
存储 编译器 C语言
C语言:文件缓冲区刷新方式有几种
C语言中文件缓冲区的刷新方式主要包括三种:自动刷新(如遇到换行符或缓冲区满)、显式调用 fflush() 函数强制刷新、以及关闭文件时自动刷新。这些方法确保数据及时写入文件。
|
4月前
|
C语言
【C语言】探索文件读写函数的全貌(三)
【C语言】探索文件读写函数的全貌
|
4月前
|
存储 C语言
【C语言】探索文件读写函数的全貌(二)
【C语言】探索文件读写函数的全貌
|
4月前
|
C语言
【C语言】探索文件读写函数的全貌(一)
【C语言】探索文件读写函数的全貌
|
4月前
|
存储 文件存储 C语言
【C语言】深入了解文件:简明指南
【C语言】深入了解文件:简明指南