一道C语言题,求大神解答!解答时把思路也分享一下,谢谢!(要求用指针,二维数组,不用子函数,直接
一道C语言题,求大神解答!解答时把思路也分享一下,谢谢!(要求用指针,二维数组,不用子函数,直接在主函数内进行)编写程序,输入二个字符行,找出这二个字符行中的最长公共子串...
一道C语言题,求大神解答!解答时把思路也分享一下,谢谢!(要求用指针,二维数组,不用子函数,直接在主函数内进行)编写程序,输入二个字符行,找出这二个字符行中的最长公共子串。
展开
展开全部
//有个问题是,空格应该也算字符吧,所以没考虑空格。就像你那个例子,最长公共字串应该是//“ student”,包含空格.还有,就是我这个应该不是很好的方法,效率比较低,我是先让串//1不动,串2先从第1个字符开始与串1比较,然后串2从第2个字符开始于串1比较,都比较完了,///串1向右挪动一个位置
#include<stdio.h>
int main()
{
char str1[100]={0},str2[100]={0};
printf("please input two strings:\n");
gets(str1);//读入字串
gets(str2);
char * p1=str1;//分别用来存str1和str2的当下比较位置
char * p2=str2;
int max=0,num=0;//max存放比较后最长字串长度,num是这一轮比较公共字串长度
char * start;//存放最大串起始位置
while(*p1!='\0')//先是串1大循环
{
p2=str2; //p2是串2首地址
while(*p2!='\0')
{
char * begin=p1;//begin是串1当前比较位置
char * begin2=p2;//begin2是串2开始比较位置
num=0;//比较前初始化为0
while(*begin!='\0' && *begin2!='\0')//一轮新的比较
{
if(*begin==*begin2) //若相同,num++;
{num++;begin++;begin2++;}
else break;
}
if(num>max) //若新比较出的字串更长,则替换max值和start内容
{max=num;
start=p1;}
p2++; //串2右移1位
}
p1++; //串1右移1位
}
while(max--) //输出串
printf("%c",*start++);
printf("\n");
}
#include<stdio.h>
int main()
{
char str1[100]={0},str2[100]={0};
printf("please input two strings:\n");
gets(str1);//读入字串
gets(str2);
char * p1=str1;//分别用来存str1和str2的当下比较位置
char * p2=str2;
int max=0,num=0;//max存放比较后最长字串长度,num是这一轮比较公共字串长度
char * start;//存放最大串起始位置
while(*p1!='\0')//先是串1大循环
{
p2=str2; //p2是串2首地址
while(*p2!='\0')
{
char * begin=p1;//begin是串1当前比较位置
char * begin2=p2;//begin2是串2开始比较位置
num=0;//比较前初始化为0
while(*begin!='\0' && *begin2!='\0')//一轮新的比较
{
if(*begin==*begin2) //若相同,num++;
{num++;begin++;begin2++;}
else break;
}
if(num>max) //若新比较出的字串更长,则替换max值和start内容
{max=num;
start=p1;}
p2++; //串2右移1位
}
p1++; //串1右移1位
}
while(max--) //输出串
printf("%c",*start++);
printf("\n");
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询