• 子串在主串中的位置


    假设主串 str1=string.LastIndexOf子串str2=Index。我们要寻找str2在str1中的首个出现位置

    1.设i用于主串str1中当前位置下标值,j用于子串str2中当前位置下标值。

    2.首先我们比较str1[1]与str2[1],如果相同的话,可能子串就开始了。

    3.如果不相等,那么子串仍然是从str2[1]开始,而主串str1则以str1[2]与其比较。即i退回到上次匹配首位的下一位 

    4.如果连续出现strlen(str2)次或以上匹配,那么就找到子串了,此时的j必然等于子串长度strlen(str2)。

    #include<stdio.h>
    #define MAXSIZE 30
    #include<string.h>
    int FindSubIndex(char str1[],char str2[])
    {
        int i,j;      // j用于子串T中当前位置下标值
        i = 0;j = 0;  // i用于主串S中当前位置下标值
        while(i < strlen(str1) && j < strlen(str2))
        {
            if(str1[i] == str2[j])
            {
                ++i;
                ++j;
            }
            else
            {
                j = 0;            //j退回到子串T的首位
                i = i - j + 1;   // i退回到上次匹配首位的下一位 
            }
        }
        if(j==strlen(str2))
        {
            return i - strlen(str2) + 1;
        }
        else
        {
            return 0;
        }
    }
    int main()
    {
        int Index = 0;
        char str1[MAXSIZE];
        char str2[MAXSIZE];

        //puts(str1);
        
    //puts(str2);
        printf("主串str1为: ");
        scanf("%s",str1);
        printf("子串str2为: ");
        scanf("%s",str2);
        Index = FindSubIndex(str1,str2);
        printf("str1的第%d个字母起和str2第一次匹配 ",Index);    
        return 0;
    }
    /*
    主串str1为: string.LastIndexOf
    子串str2为: Index
    str1的第12个字母起和str2第一次匹配

    请按任意键继续. . .*/ 

  • 相关阅读:
    linux中grep用法(“或”、“与”)
    mac 常用开发软件列表
    Devops实战(四)Rancher的部署与安装详解
    Devops实战(三)Kubenets与minikube的安装以及使用实战
    intel 无线网卡 AC8260 周期性跳ping(高延迟)解决方案
    确定了,回归吧,19,20就当换了换环境,该努力了。
    win10下用Linux搭建python&nodejs开发环境
    pict总结
    移动无线常用测试工具
    游戏测试工具
  • 原文地址:https://www.cnblogs.com/lanshy/p/3431142.html
Copyright © 2020-2023  润新知