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 }

 

posted @ 2017-11-28 15:51  Goz  阅读(380)  评论(0编辑  收藏  举报