13、字符串相互匹配删除
单个字符串相互匹配
1 #include <stdio.h> 2 #define Maxlength 1000 3 4 int squeeze(char s1[], char s2[]); 5 6 int main() 7 { 8 int c; 9 int i = 0; 10 int result = 0; //删除匹配函数返回结果 11 12 char s1[Maxlength]; //字符串1 13 char s2[Maxlength]; //字符串2 14 15 for(i=0; i<Maxlength; ++i) 16 s1[i] = '\0'; 17 for(i=0; i<Maxlength; ++i) 18 s2[i] = '\0'; 19 20 printf("请输入需要进行匹配的字符串1:\n"); 21 22 for(i=0; (c=getchar())!='\n'; ++i) 23 s1[i] = c; 24 25 printf("请输入被匹配的字符串2:\n"); 26 for(i=0; (c=getchar())!='\n'; ++i) 27 s2[i] = c; 28 29 result = squeeze(s1, s2); 30 31 if(result == 1) 32 printf("将字符串1中和字符串2匹配的部分删除后结果为:\n%s", s1); 33 else if(result == 2) 34 printf("字符串1没有输入内容!"); 35 else if(result == 3) 36 printf("字符串2没有输入内容!"); 37 else 38 printf("输入的两字符串中没有匹配部分!"); 39 return 0; 40 } 41 42 int squeeze(char s1[], char s2[]) 43 { 44 int i = 0; //字符串1计数控制 45 int s = 0; //字符串1前移起始位置记录 46 int p = 0; //字符串2计数控制 47 int state = 0; //匹配结果:1:匹配到内容并删除 2:S1没有内容 3:s2没有内容 0:没有匹配到相同内容 48 49 if(s1[i] == '\0' || s1[i] == '\n') 50 state = 2; //状态2:字符串1没有输入内容,异常 51 else if(s2[i] == '\0' || s2[i] == '\n') 52 state = 3; //状态3:字符串2没有输入内容,异常 53 else 54 for(i=0; s1[i]!='\0'; ++i) 55 { 56 for(p=0; s2[p]!='\0'; ++p ) 57 { 58 if(s1[i] == s2[p]) 59 { 60 state = 1; //状态1:查询到匹配部分,正常处理 61 s = i; 62 for(; s1[s+1]!='\0'; ++s) 63 { 64 s1[s] = s1[s+1]; 65 } 66 s1[s] = '\0'; 67 } 68 } 69 } 70 return state; 71 }
整个字符串匹配
1 #include <stdio.h> 2 #define Maxlength 1000 3 4 int squeeze(char s1[], char s2[]); 5 6 int main() 7 { 8 int c; 9 int i = 0; 10 int result = 0; //删除匹配函数返回结果 11 12 char s1[Maxlength]; //字符串1 13 char s2[Maxlength]; //字符串2 14 15 for(i=0; i<Maxlength; ++i) 16 s1[i] = '\0'; 17 for(i=0; i<Maxlength; ++i) 18 s2[i] = '\0'; 19 20 printf("请输入需要进行匹配的字符串1:\n"); 21 22 for(i=0; (c=getchar())!='\n'; ++i) 23 s1[i] = c; 24 25 printf("请输入被匹配的字符串2:\n"); 26 for(i=0; (c=getchar())!='\n'; ++i) 27 s2[i] = c; 28 29 result = squeeze(s1, s2); 30 31 if(result == 1) 32 printf("将字符串1中和字符串2匹配的部分删除后结果为:\n%s", s1); 33 else if(result == 2) 34 printf("字符串1没有输入内容!"); 35 else if(result == 3) 36 printf("字符串2没有输入内容!"); 37 else 38 printf("输入的两字符串中没有完全匹配部分!"); 39 return 0; 40 } 41 42 int squeeze(char s1[], char s2[]) 43 { 44 int i = 0; //字符串1查询计数 45 int p = 0; //字符串2查询计数 46 int s = 0; //字符串1左移起始位置记录 47 int m = 0; //字符串1左移长度记录 48 int state = 'N'; //匹配状态 49 int result = 0; //匹配结果 50 51 if(s1[i] == '\0' || s1[i] == '\n') 52 result = 2; //状态2:字符串1没有输入内容,异常 53 else if(s2[i] == '\0' || s2[i] == '\n') 54 result = 3; //状态3:字符串2没有输入内容,异常 55 else 56 for(i=0; s1[i]!='\0'; ++i,p=0) 57 if(s1[i] == s2[p]) //查询到与S2的第一个字符匹配 58 { 59 s = i; //记录匹配位置 60 state = 'Y'; //进入连续对比状态 61 while(state=='Y' && s1[s]==s2[p] && s2[p]!='\0') 62 { 63 ++s; //如果处于连续对比状态 64 ++p; //两字符串同步递增,连续进行对比 65 } 66 if(s2[p] == '\0') //对比完成后,如果S2的最后对比的是'\0' 67 { 68 result = 1; //说明相同部分一直持续到S2的结尾,即完全匹配 69 m = s-i; //字符串S1需要左移的长度 70 s = i; //字符串S1进行左移的起始位置 71 for(; s1[s]!='\0'; ++s) //字符串S1左移 72 s1[s] = s1[s+m]; 73 } 74 else //如果对比完成后,S2最后进行对比的不是'\0' 75 state = 'N'; //说明两字符串的相同部分没有持续到最后,即没有完全匹配 76 } 77 return result; 78 }