1 求两个字符串的最大公共字串
#include "stdio.h" #include "malloc.h" #include "string.h" char *maxsubstr(char *str1, char *str2) { char *p1, *p2, *q1, *q2, *destp; char *substr; int max = 0, len; p1 = str1; while(*p1 != '\0') { q1 = str2; while(*q1 != '\0') { len = 0; //这部分初始化非常重要,要注意好! p2 = p1; q2 = q1; while((*p2 != '\0')&&(*q2 != '\0')) { if(*p2 == *q2) { p2 ++;q2 ++;len ++; } else { break; } } if(len > max) { max = len; destp =p1; } q1++; } p1++; } substr=(char*)malloc(sizeof(char)*max); strncpy(substr,destp,max); substr[max] = '\0'; return substr; } int main() { char *s1="aocdfe"; char *s2="pmcdfa"; char *sub; printf("%s\n%s\n",s1,s2); sub = maxsubstr(s1,s2); printf("the max sub string is:%s\n",sub); return 0; }
2 求一个字符串中连续数字字符最大的串,并且返回其个数
#include <stdio.h> #include <string.h> #include <malloc.h> int maxSeqStr(char *input_str,char *output_str) { char *p,*q,*des; int len,max = 0; p = input_str; while(*p != '\0') { q = p; len = 0;//非常重要的初始化部分! while(*q != '\0') { if((*q >= '0') && (*q <= '9')) { len ++; q ++; } else { break; } } if(len > max) { max = len; des = p; } p ++; } strncpy(output_str,des,max); output_str[max] = '\0'; return max; } int main() { char *input_str = "sdf3432432ksjd234k345fjsd9835sdfsd0123456789dfgdfg45345"; char *output_str = (char *)malloc(strlen(input_str)); printf("max = %d\n",maxSeqStr(input_str,output_str)); printf("output = %s\n",output_str); }