子串在主串中的位置
假設主串 str1=string.LastIndexOf,子串str2=Index。我們要尋找str2在str1中的首個出現位置。
#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第一次匹配
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
總結
- 上一篇: Android安装包apk文件在某些版本
- 下一篇: Excel导入sqlserver