子串在主串中的位置

假设主串 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第一次匹配\n ",Index);    
     return  0;
}
/*
主串str1为: string.LastIndexOf
子串str2为: Index
str1的第12个字母起和str2第一次匹配

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

转载于:https://www.cnblogs.com/lanshy/p/3431142.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值