手串問(wèn)題標(biāo)準(zhǔn)全提取
#include <stdio.h>
#include <string.h>
void getMaxCommonSubstring(char*,char*);
int main(){
? ? char str1[1000],str2[1000];
? ? scanf("%s",str1);
? ? scanf("%s",str2);
? ? getMaxCommonSubstring(str1,str2);
? ? return 0;
}
//得到兩個(gè)字符串的最大公共子串并輸出
//如果有多個(gè)最大子串只輸出第一個(gè)
void getMaxCommonSubstring(char* str1,char* str2){
? ? int len1 = strlen(str1);
? ? int len2 = strlen(str2);
? ? //保存最大字符串及其長(zhǎng)度
? ? int maxLen = 0;
? ? char maxStr[1000]={0};
? ? //對(duì)str1和str2進(jìn)行遍歷
? ? int i,j,k;
? ? for(i=0;i<len1;i++){
? ? ? ? for(j=0;j<len2;j++){
? ? ? ? ? ? //如果某個(gè)字符相同艰额,則繼續(xù)看后面最多有幾個(gè)相同
? ? ? ? ? ? if(str1[i]==str2[j]){
? ? ? ? ? ? ? ? //保存已匹配的字符串及其長(zhǎng)度
? ? ? ? ? ? ? ? int len = 1;
? ? ? ? ? ? ? ? char buff[1000]={0};
? ? ? ? ? ? ? ? buff[0]=str2[j];
? ? ? ? ? ? ? ? //對(duì)后面的字符遍歷
? ? ? ? ? ? ? ? for(k=1;i+k<len1&&j+k<len2;k++){
? ? ? ? ? ? ? ? ? ? //字符不相同則跳出
? ? ? ? ? ? ? ? ? ? if(str1[i+k]!=str2[j+k])break;
? ? ? ? ? ? ? ? ? ? buff[len++]=str2[j+k];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //如果匹配的字符串比原來(lái)的最大字符串更大糜工,則拷貝到最大字符串
? ? ? ? ? ? ? ? if(len>maxLen){
? ? ? ? ? ? ? ? ? ? maxLen=len;
? ? ? ? ? ? ? ? ? ? strcpy(maxStr,buff);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? printf("MaxCommonSubstring:\n%s\nlength:%d\n",maxStr,maxLen);