int main(int argc, char* argv[]){ char str1[LEN] = {0}; char str2[LEN] = {0}; printf("Input a String: "); scanf("%s", str1); printf("and Another String: "); scanf("%s", str2); // printf("%d %d\n", (int)strlen(str1), (int)strlen(str2)); char* big; char* small; int big_len, small_len; if(strlen(str1) > strlen(str2)){ big = str1; small = str2; big_len = strlen(str1); small_len = strlen(str2); }else{ big = str2; small = str1; big_len = strlen(str2); small_len = strlen(str1); } // printf("big=%s, small=%s\n", big, small); int i; int j; char sub_str[LEN] = {0}; for(i = small_len; i > 0; i--){ // 子串宽度 for(j = 0; j < small_len-i+1; j++){ get_sub_str(small, j, i, sub_str); if(have_str(big, sub_str)){ printf("最大公共字串: %s\n", sub_str); return 0; } } } return 0; }
int have_str(const char* src, const char* sub){ int i; int src_len = strlen(src); int sub_len = strlen(sub); char src_tmp[LEN] = {0}; for(i = 0; i < src_len - sub_len; i++){ get_sub_str(src, i, sub_len, src_tmp); if(strcmp(src_tmp, sub) == 0){ return 1; } } return 0; }
char *get_parenthese_expr(char *str, int *st, int *e) { int i; int start; int end; i = 0; start = -1; end = -1; while (str[i] != '\0' && end == -1) { if (str[i] == '(') start = i; else if (start != -1 && str[i] == ')') end = i; ++i; } if (end < 0 || start < 0) return (NULL); *st = start; *e = end; return (get_sub_str(str, start, end)); }