• 字符串查找子串


    不调用任何系统函数,实现一个字符串查找子串的函数,如果包含字串,则返回该字符串的位置值,如果不包含,则返回-1

     1 //不调用任何系统函数,实现一个字符串查找子串的函数,如果包含字串,则返回该字符串的位置值,如果不包含,则返回-1
     2 #include "stdafx.h"
     3 #include <string.h>
     4 
     5 //方法1
     6 int search_max_substr1(const char *str1,const char *str2)//在str1中查找子串str2
     7 {
     8     int pos=0,k=0,staic=0;
     9     int str1_len=strlen(str1);
    10     int str2_len=strlen(str2);
    11     for(int i=0;i<str1_len;i++)
    12     {
    13         for(int j=0;j<str2_len;j++)
    14         {
    15             if (str1[i]==str2[j])
    16             {
    17                 staic=1;
    18                 k=1;
    19                 pos=i;
    20                 while((str1[i+k]==str2[j+k])&&(str1[i+k]!='\0')&&(str2[j+k]!='\0'))
    21                     {
    22                         k++;
    23                     }
    24                 break;
    25             }
    26         }
    27         if (staic==1)
    28             break;
    29     }
    30     if(k==str2_len) //若在str1中找到子串str2,返回子串在str1中的位置
    31         return pos;
    32     else
    33         return -1;
    34 }
    35 
    36 //方法2
    37 int search_max_substr2(const char *str1,const char *str2)
    38 {
    39     int len1=strlen(str1),len2=strlen(str2);
    40     int i=0,j=0;
    41     while (i<len1&&j<len2)
    42     {
    43         if ( *(str1+i)==*(str2+j) )
    44         {
    45             int pos=i;
    46             int ii=i+1;
    47             int jj=j+1;
    48             while ((ii<len1)&&(jj<len2))
    49             {
    50                 if(*(str1+ii)==*(str2+jj))
    51                 {
    52                     ii++;
    53                     jj++;
    54                 }
    55                 else 
    56                 {
    57                     break;
    58                 }
    59             }
    60         if(jj==len2)//查找成功
    61             return pos;
    62         
    63         }
    64         else 
    65         {
    66             i++;
    67         }
    68     }
    69     return -1;
    70 }
    71 
    72 void main()
    73 {
    74     int x;
    75     //x=search_max_substr1("abcdegf","cde");
    76     x=search_max_substr2("abcdegf","cde");
    77     if (x!=-1)
    78         printf("succed! location=%d",x);
    79     else 
    80         printf("-1");
    81 }
  • 相关阅读:
    android ART hook
    Bind Enum to ListControl
    注意WPF中绑定使用的是引用类型
    Android开发第2篇
    Android开发第1篇
    Extension method for type
    DB2实用命令记录
    TDD三大定律
    【InstallShield】 为什么卸载后有的文件没有删掉
    GAC write failed when upgrade with InstallShield
  • 原文地址:https://www.cnblogs.com/xingele0917/p/2711615.html
Copyright © 2020-2023  润新知