1. 实验环境、题目、目的
1.1. 实验环境
表 1.1:系统配置、编译环境、其他条件
CPU
|
Core i5-7300HQ @2.5GHz
|
RAM
|
16G
|
硬盘
|
西部数据蓝盘 3D 500G
|
系统
|
Windows 10 18362.30
|
电源性能
|
连接电源、均衡
|
其他同时运行的程序
|
Word,VSCode,TIM,Chrome
|
编译命令
|
clang++ **.cpp -o **.exe -std=c++17 -static-libgcc --
target=x86_64-w64-mingw -O2
|
其中编译命令中,**表示某些文件名。由于使用大量的 STL 内容,因此打开
O2 提升性能(实际上 Visual Studio 也是默认打开 O2 的),否则速度太慢。不过为了防止过慢,基本所有的都是简单数据结构和简单算法,比如 vector 和 sort,pair 之类。
本次实验的所有代码都移交给 Git 托管,不包括内容详见.gitignore。
1.2. 实验题目
注意:下面题目内容是从实验题目 Word 文件复制,可能最终实现的题目有点差别。
有两个内容相似的文本文件,一个是未修改过的老版本,一个是修改过的新版本。要求实现以下功能:
1) 比较两个文件内容的差异,新老文件每行前均显示行号,比较结果要求能区分并标记出插入、修改、删除和移动的数据行;
2) 能够从一个文件中选择存在差异的数据行,合并到另一文件中,然后保存合并结果。
3) 对两个文件夹内的多个文件或子文件夹进行比较,标记出存在差异的文件, 可从一个文件中选择一个文件复制到另一个文件夹中
1.3. 个人的实现程度以及原因
1) 考虑到大型软件的核心比较程序都没有界面(比如 windows 自带的 diff,git 的
diff),也有好用的软件(但是我没听说过)基于 python 实现了界面,VSCode是基于 chrome 的渲染引擎实现的,因此对于任何的输出结果都可以方便的显示,因此我这里选择命令行实现。
2) 考虑到所有的 diff 算法都不识别移动,因此移动被忽略掉。举个例子:两个 10k 行的 bin 文件,每一行是 1-10 之一,在这种情况下,diff 无法识别出修改和移动。
3) 考虑到这个程序应当有一定的用户体验,我针对体验进行了一些优化。比如只有两个文件的时候是直接比较,但是两个文件夹则是取两者相对路径的交集进行比较。
4) 考虑到命令行的要求,我加入了几个可选项,方便对比。实际合并的时候会忽略选项,因为这影响到了文件的真实性。
5) 设计主要参考了代码需求,甚至没有考虑过 docx 之类的需求。
1.4. 实验目的
本实验的主要目的再于以下几点:
1) 小规模软件的构建。
2) 字符串的±1调整。
3) Windows 系统或者 C 底层的应用。
4) 设计模式的简单应用。