一道C语言题,求大神解答!解答时把思路也分享一下,谢谢!(要求用指针,二维数组,不用子函数,直接

2024-11-02 15:32:43
推荐回答(1个)
回答1:

//有个问题是,空格应该也算字符吧,所以没考虑空格。就像你那个例子,最长公共字串应该是//“ student”,包含空格.还有,就是我皮游这个应该不是很好的方法,效率比较低,我是先让串//1不动,串2先从第1个字符开始与串1比较,然后串2从第2个字符开始于串1比较,都比较完了,///串1向右挪动一个位滚码置
#include
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");
}