zoukankan      html  css  js  c++  java
  • 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] = '';
    17     for(i=0; i<Maxlength; ++i)
    18         s2[i] = '';
    19 
    20     printf("请输入需要进行匹配的字符串1:
    ");
    21 
    22     for(i=0; (c=getchar())!='
    '; ++i)
    23         s1[i] = c;
    24 
    25     printf("请输入被匹配的字符串2:
    ");
    26     for(i=0; (c=getchar())!='
    '; ++i)
    27         s2[i] = c;
    28 
    29     result = squeeze(s1, s2);
    30 
    31     if(result == 1)
    32         printf("将字符串1中和字符串2匹配的部分删除后结果为:
    %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] == '' || s1[i] == '
    ')
    50         state = 2;                             //状态2:字符串1没有输入内容,异常
    51     else if(s2[i] == '' || s2[i] == '
    ')
    52         state = 3;                             //状态3:字符串2没有输入内容,异常
    53     else
    54         for(i=0; s1[i]!=''; ++i)
    55             {
    56                 for(p=0; s2[p]!=''; ++p )
    57                 {
    58                     if(s1[i] == s2[p])
    59                     {
    60                         state = 1;             //状态1:查询到匹配部分,正常处理
    61                         s = i;
    62                         for(; s1[s+1]!=''; ++s)
    63                         {
    64                             s1[s] = s1[s+1];
    65                         }
    66                         s1[s] = '';
    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] = '';
    17     for(i=0; i<Maxlength; ++i)
    18         s2[i] = '';
    19 
    20     printf("请输入需要进行匹配的字符串1:
    ");
    21 
    22     for(i=0; (c=getchar())!='
    '; ++i)
    23         s1[i] = c;
    24 
    25     printf("请输入被匹配的字符串2:
    ");
    26     for(i=0; (c=getchar())!='
    '; ++i)
    27         s2[i] = c;
    28 
    29     result = squeeze(s1, s2);
    30 
    31     if(result == 1)
    32         printf("将字符串1中和字符串2匹配的部分删除后结果为:
    %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] == '' || s1[i] == '
    ')
    52         result = 2;                             //状态2:字符串1没有输入内容,异常
    53     else if(s2[i] == '' || s2[i] == '
    ')
    54         result = 3;                             //状态3:字符串2没有输入内容,异常
    55     else
    56         for(i=0; s1[i]!=''; ++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]!='')
    62                 {
    63                     ++s;                        //如果处于连续对比状态
    64                     ++p;                        //两字符串同步递增,连续进行对比
    65                 }
    66                 if(s2[p] == '')               //对比完成后,如果S2的最后对比的是''
    67                 {
    68                     result = 1;                 //说明相同部分一直持续到S2的结尾,即完全匹配
    69                     m = s-i;                    //字符串S1需要左移的长度
    70                     s = i;                      //字符串S1进行左移的起始位置
    71                     for(; s1[s]!=''; ++s)     //字符串S1左移
    72                         s1[s] = s1[s+m];
    73                 }
    74                 else                            //如果对比完成后,S2最后进行对比的不是''
    75                     state = 'N';                //说明两字符串的相同部分没有持续到最后,即没有完全匹配
    76             }
    77     return result;
    78 }

  • 相关阅读:
    iPhone控件之UIWebView2
    Xcode 4.1/4.2 免证书(iDP)开发+真机调试
    iPhone控件之UIToolbar
    POJ 2472 ||SDUT 2358 106 miles to Chicago(Dijkstra算法变形)
    POJ 2418 Hardwood Species(二叉排序树)
    POJ 2513 Colored Sticks(字典树 + 并查集 + 欧拉回路)
    HDU 4033 Regular Polygon(几何 + 二分)
    POJ 3191 The Moronic Cowmpouter(二进制的变形)
    POJ 2442 Sequence(堆的应用)
    HDU 4036 Rolling Hongshu(数学+物理应用)
  • 原文地址:https://www.cnblogs.com/Gozz/p/7910370.html
Copyright © 2011-2022 走看看