电力法2015实施细则doc:哪位好心人帮忙看下程序(C语言),谢谢!

来源:百度文库 编辑:中科新闻网 时间:2024/05/03 11:01:30
【问题描述】
编写一个程序,对输入的字符串s和t,求其最长的公共子字符串。
【输入形式】
从屏幕分行读入串s和t。s和t由任意字符构成,长度都不超50个字符。输入数据确保只有唯一的最长公共子串。如果没有公共子串,打印No Answer

【输出形式】
在单独行上输出串s和串t的最长公共子串,在结尾输出一个回车符。

算法提示:用一个int型的计数器记录当前匹配长度,用一个字符数组记录当前匹配子串,如果存在更长子串,则进行相应替换。
【样例说明】
假设从屏幕输入以下内容:
aabcdababce
12abcabcdace
则输出内容为:
abcda
【评分标准】
结果完全正确得20分,每个测试点4分,提交程序文件名为c0505.c。

Upload Your source File(s) :
Note :Your program can be written with the programing language(s) as below
C(.c): your source filename is ``c0505.c''

#include<stdio.h>
#include<string.h>
main()
{

char s1[50],s2[50],s3[50],s4[50],c;
int i,j,k,g,l1,l2,x,y;
int m,n,yy;

scanf("%s",&s2);
scanf("%s",&s1);

l1=strlen(s1);
l2=strlen(s2);

x=0;
y=0;

for(i=0;i<l1-1;i++)
for(j=0;j<l2-1;j++)
{
k=i;g=j;
c=s1[k];
if(s2[g]==c)
{
while((s2[g]==s1[k])&&(g<=l2)&&(k<=l1))
{
s3[m]+=s2[g];
m++;
k=k+1;
g=g+1;
x=x+1;
}
if(x>y)
{
m=0;n=0;
s4[n]=s3[m];
m++;n++;
y=x;
}
x=0;
}
}
yy=strlen(s3);
for(n=0;n<yy;n++)
printf("%c",s4);
}

s,时间仓促,程序没有运行过,但是思想正确,思想如下
char1 ahsbdmmdl
char2 bcdefd
从char2第一个开始比char1每一个,当比到一个相同的就进入一个循环.循环结束条件是当char1[i]!=char2[j],每循环一次same++.循环结束后.if(same>max)max=same 开始的位置就是第一个想同的地方

#include<stdio.h>
#include<string.h>
main()
{
int max,i,j=0,same=0,data,begin;
char char1[50],char2[50];
scanf("%s",char1);
scanf("%S",char2);
while(char1!=NULL)
{
same=0;
if(char1[i]==char2[j])
{
data=i;
same++;
while(char1[i]==char1[j])
{
same++;
}
i=-1;
}
if(same>max){max=same;begin=data;}
j++;
i++;
}
for(i=begin;i<=(begin+same);i++)
printf("%c",char1[i]);
}