作用
辅助程序查错
使用
输入两段目标文本,都以0结尾
代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <iomanip>
using namespace std;
string a[205];
string b[205];
void Delete_Black(string &s) //删去一行字符串中的空格
{
int index = 0;
if( !s.empty())
{
while( (index = s.find(' ',index)) != string::npos) //string::npos意为不存在,即字符串结尾
{
s.erase(index,1); //删除从index开始的一个字符,即空格
}
index=0;
while( (index = s.find(9,index)) != string::npos) //string::npos意为不存在,即字符串结尾
{
s.erase(index,1); //删除从index开始的一个字符,即TAB
}
}
}
void Pre() //先对两个文本进行去空格处理并输出
{
cout<<"对两个文本输出处理后结果:"<<endl;
for(int i=0;a[i].compare("0")&&b[i].compare("0");i++)
{
cout<<left<<setw(3)<<i+1<<left<<setw(50)<<a[i];
cout<<left<<setw(3)<<i+1<<b[i]<<endl;
}
cout<<endl;
}
int main()
{
int flag=1; //标记是否存在不同
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int i;
for(i=0;getline(cin,a[i]);i++)
{
Delete_Black(a[i]);
if(a[i]=="\0") i--; //跳过空格处理
if(!a[i].compare("0")) break; //碰到0时跳出
}
int j;
for(j=0;getline(cin,b[j]);j++)
{
Delete_Black(b[j]);
if(b[j]=="\0") j--;
if(!b[j].compare("0")) break;
}
Pre();
cout<<"在前"<<min(i,j)<<"行,在去除空行及空格、TAB后,两段文本:"<<endl;
for(int k=0;k<min(i,j);k++)
{
if(a[k].compare(b[k]))
{
flag=0;
cout<<"第"<<k+1<<"行不同"<<endl;
}
}
if(flag) cout<<"完全相同"<<endl;
return 0;
}
示例
输入
#include<cstdio>#include<cstring>
#include<algorithm>
using namespace std;
char a[520],b[520];
int dp[520][520];
int main()
{
while (~scanf("%s",a))
{
scanf("%s",b);
int n=strlen(a);
int m=strlen(b);
memset(dp,0,sizeof(dp));
for (int i=0;i<m;i++)
if (a[0]==b[i])
dp[0][i]=1;
for (int i=0;i<n;i++)
if (b[0]==a[i])
dp[i][0]=1;
for (int i=1;i<n;i++)
for (int j=1;j<m;j++)
if (a[i]==b[j])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
printf("%d\n",dp[n-1][m-1]);
}
return 0;
}
ssdf
sdfssdfs
sdfsdf
dsfs
0
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char a[520],b[520];
int dp[520][520];
int main()
{
while (~scanf("%s",a))
{
scanf("%s",b);
int n=strlen(a);
int m=strlen(b);
memset(dp,0,sizeof(dp));
for (int i=0;i<m;i++)
if (a[0]==b[i])
dp[0][i]=1;
for (int i=0;i<n;i++)
if (b[0]==a[i])
dp[i][0]=1;*/
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (a[i-1]==b[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
printf("%d\n",dp[n][m]);
}
return 0;
}
0
输出
对两个文本输出处理后结果:
1 #include<cstdio> 1 #include<cstdio>
2 #include<cstring> 2 #include<cstring>
3 #include<algorithm> 3 #include<algorithm>
4 usingnamespacestd; 4 usingnamespacestd;
5 chara[520],b[520]; 5 chara[520],b[520];
6 intdp[520][520]; 6 intdp[520][520];
7 intmain() 7 intmain()
8 { 8 {
9 while(~scanf("%s",a)) 9 while(~scanf("%s",a))
10 { 10 {
11 scanf("%s",b); 11 scanf("%s",b);
12 intn=strlen(a); 12 intn=strlen(a);
13 intm=strlen(b); 13 intm=strlen(b);
14 memset(dp,0,sizeof(dp)); 14 memset(dp,0,sizeof(dp));
15 for(inti=0;i<m;i++) 15 for(inti=0;i<m;i++)
16 if(a[0]==b[i]) 16 if(a[0]==b[i])
17 dp[0][i]=1; 17 dp[0][i]=1;
18 for(inti=0;i<n;i++) 18 for(inti=0;i<n;i++)
19 if(b[0]==a[i]) 19 if(b[0]==a[i])
20 dp[i][0]=1; 20 dp[i][0]=1;*/
21 for(inti=1;i<n;i++) 21 for(inti=1;i<=n;i++)
22 for(intj=1;j<m;j++) 22 for(intj=1;j<=m;j++)
23 if(a[i]==b[j]) 23 if(a[i-1]==b[j-1])
24 dp[i][j]=dp[i-1][j-1]+1; 24 dp[i][j]=dp[i-1][j-1]+1;
25 else 25 else
26 dp[i][j]=max(dp[i-1][j],dp[i][j-1]); 26 dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
27 printf("%d\n",dp[n-1][m-1]); 27 printf("%d\n",dp[n][m]);
28 } 28 }
29 return0; 29 return0;
30 } 30 }
在前30行,在去除空行及空格、TAB后,两段文本:
第20行不同
第21行不同
第22行不同
第23行不同
第27行不同
1 #include<cstdio> 1 #include<cstdio>
2 #include<cstring> 2 #include<cstring>
3 #include<algorithm> 3 #include<algorithm>
4 usingnamespacestd; 4 usingnamespacestd;
5 chara[520],b[520]; 5 chara[520],b[520];
6 intdp[520][520]; 6 intdp[520][520];
7 intmain() 7 intmain()
8 { 8 {
9 while(~scanf("%s",a)) 9 while(~scanf("%s",a))
10 { 10 {
11 scanf("%s",b); 11 scanf("%s",b);
12 intn=strlen(a); 12 intn=strlen(a);
13 intm=strlen(b); 13 intm=strlen(b);
14 memset(dp,0,sizeof(dp)); 14 memset(dp,0,sizeof(dp));
15 for(inti=0;i<m;i++) 15 for(inti=0;i<m;i++)
16 if(a[0]==b[i]) 16 if(a[0]==b[i])
17 dp[0][i]=1; 17 dp[0][i]=1;
18 for(inti=0;i<n;i++) 18 for(inti=0;i<n;i++)
19 if(b[0]==a[i]) 19 if(b[0]==a[i])
20 dp[i][0]=1; 20 dp[i][0]=1;*/
21 for(inti=1;i<n;i++) 21 for(inti=1;i<=n;i++)
22 for(intj=1;j<m;j++) 22 for(intj=1;j<=m;j++)
23 if(a[i]==b[j]) 23 if(a[i-1]==b[j-1])
24 dp[i][j]=dp[i-1][j-1]+1; 24 dp[i][j]=dp[i-1][j-1]+1;
25 else 25 else
26 dp[i][j]=max(dp[i-1][j],dp[i][j-1]); 26 dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
27 printf("%d\n",dp[n-1][m-1]); 27 printf("%d\n",dp[n][m]);
28 } 28 }
29 return0; 29 return0;
30 } 30 }
在前30行,在去除空行及空格、TAB后,两段文本:
第20行不同
第21行不同
第22行不同
第23行不同
第27行不同