當前位置:編程學習大全網 - 編程軟體 - C語言編程 查找兩字符串的最長公***子串 如"I am a student."與"R u a student?"最長公***子串是"student"

C語言編程 查找兩字符串的最長公***子串 如"I am a student."與"R u a student?"最長公***子串是"student"

//有個問題是,空格應該也算字符吧,所以沒考慮空格。就像妳那個例子,最長公***字串應該是//“?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");

}

  • 上一篇:歐姆龍PLC驅動程序何去何從?
  • 下一篇:貴州噴泉造價是多少,噴泉公司,噴泉設計公司
  • copyright 2024編程學習大全網