📄 compare.cpp
字号:
#include<iostream>
#include<string>
#include<stdlib.h>
#include"fstream"
using namespace std;
struct txt
{
int value;
string str;
};
const int NUM=100; //待比较文本的段落的最大数目
string getpara(ifstream &fp,char &ch,int &nnn)
{
nnn=0;
while (ch=='\n'||ch=='\r') ch=fp.get();
string ss;
char st[100];
int j=0;
while (ch!='\n'&&ch!='#'&&ch!='\r')
{
st[j]=ch;
j++;
nnn=nnn+ch;//算出该段所有字符的ASCII码值的和,以便在比较过程中节省时间
ch=fp.get();
}
st[j]='\0';
ss=st;
return ss;
}
int main(int argc,char *argv[])
{
if (argc!=4)
{
cout<<"命令名错误!或缺少参数!"<<endl;
return 1;
}
ifstream in1(argv[1],ios::in|ios::binary);
if (!in1)
{
cout<<"cannot open the input.txt!\n";
return 1;
}
ifstream in2(argv[2],ios::in|ios::binary);
if (!in2)
{
cout<<"cannot open the input.txt!\n";
return 1;
}
fstream result(argv[3],ios::out);
if (!result)
{
cout<<"cannot open the file output!\n";
return 1;
}
txt source[NUM];
txt target[NUM];
char ch=in1.get();
int nn=0,m,n,nnn,i,j;
while (ch!='#')//两个待比较文本均要以#结束
{
nnn=0;
source[nn].str=getpara(in1,ch,nnn);
source[nn].value=nnn;
nn++;
}
m=nn;
ch=in2.get();
nn=0;
while (ch!='#')//两个待比较文本均要以#结束
{
nnn=0;
target[nn].str=getpara(in2,ch,nnn);
target[nn].value=nnn;
nn++;
}
n=nn;
bool f;
int com[NUM];
for (j=0;j<n;j++)
{
i=0;f=false;
while(i<m&&f==false)
{
if (source[i].value==target[j].value)
{
if (source[i].str==target[j].str)
{
result<<"目标文件第"<<j+1<<"段为源文件第"<<i+1<<"段"<<endl;
com[j]=i;
f=true;
}
else i++;
}
else i++;
}
if (f==false)
{
result<<"目标文件第"<<j+1<<"段为新增段"<<endl;
com[j]=NUM;
}
}
int t,x,w,y;
i=0;j=0;
while (j<n)
{
while (com[j]==i&&j<n)
{
i++;j++;
}
if (j==n) result<<"比较结束!"<<endl;
else if (com[j]==NUM)
{
t=0;
while (com[j]==NUM&&j<n)
{
t++;j++;
}
if (j==n) result<<"源文件从第"<<i+1<<"段开始,在目标文件中完全被"<<t<<"个新文件所代替!比较结束!"<<endl;
if (j<n)
{
if (i==com[j]) result<<"源文件的第"<<i<<"段与第"<<com[j]+1<<"段之间在目标文件中添加了"<<t<<"个新段落!"<<endl;
else
{
y=j+1;
while (com[y]!=i&&y<n) y++;
if (y==n)
{
result<<"源文件中的第"<<i+1<<"段在目标文件中被删除!并在此添加了"<<t<<"个新增段!"<<endl;
i++;
}
else
{
result<<"源文件从第"<<i<<"段开始到第"<<i+1<<"段之间在目标文件中依次插入了以下几段:"<<endl;
for (w=j;w<y;w++)
{
if (com[j]==NUM) result<<"一个新段落"<<endl;
else result<<"源文件中的第"<<com[j]+1<<"段"<<endl;
j++;
}
}
}
}
}
else if (com[j]!=NUM)
{
x=j+1;
while (com[x]!=i&&x<n) x++;
if (x==n)
{
result<<"源文件中的第"<<i+1<<"段在目标文件中被删除!"<<endl;
i++;
}
else
{
result<<"源文件从第"<<i<<"段开始到第"<<i+1<<"段之间在目标文件中依次插入了以下几段:"<<endl;
for (w=j;w<x;w++)
{
if (com[j]==NUM) result<<"一个新段落"<<endl;
else result<<"源文件中的第"<<com[j]+1<<"段"<<endl;
j++;
}
}
}
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -