数据结构中定位函数Index的使用方法
实现代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 40 //最大字符串
typedef int Status;
typedef char SString[MAXSIZE+1];
//此处声明的SString[maxsize+1]虽是数组,在SubString中作为指针使用,
//因位是指针,SString[0]存放实际数组的地址,使用时不用加*或&,直接传入数组的值
/*******************************声明部分****************************************/
Status StrAssign(SString T, char *chars);
//生成一个其值等于chars的串T 第一个元素为字符串长度
int StrLength(SString S);
//操作结果:返回S的元素个数,成为串的长度
int StrCompare(SString S,SString T);
//操作结果:若S>T,则返回值>0;若S = T,则返回值 =0;若S<T,则返回值<0
Status SubString(SString Sub, SString T, int pos, int len);
//用Sub返回串T的第pos个字符起长度为len的子串
int Index(SString S,SString T, int pos);
//若主串S中存在和串T值相同的子串,则返回它在主串中第pos个字符之后第一次出现的位置;否则函数值为0
/*******************************函数部分****************************************/
Status StrAssign(SString T, char *chars)
{
int i,ct;
for (i = 0;i <= MAXSIZE; i++)
T[i] = '\0' ; //全部清零
T[0] = strlen (chars);
for (ct = 1;*chars != '\0' ;ct++,chars++){
T[ct] = *chars;
}
return OK;
}
int StrLength(SString S)
{
return S[0];
}
int StrCompare(SString S,SString T)
{
int cnt = 1;
while (cnt <= S[0] && cnt <= T[0]){ //非空前提下
if (S[cnt] == T[cnt]){ //相等
cnt++;
}
else { //不相等
return S[cnt] - T[cnt];
}
}
return S[0]-T[0];
}
Status SubString(SString Sub, SString T, int pos, int len)
{
if (pos<1 || pos>T[0] || len<0 || len>T[0]-pos+1)
return ERROR;
int ct,cnt;
for (ct = 1,cnt = pos;cnt <= len+pos;ct++,cnt++){
Sub[ct]=T[cnt];
}
Sub[0] = len+1;
return OK;
}
int Index(SString S,SString T, int pos)
{
SString Sub;
int i = pos;
if (pos > 0){
int n = StrLength(S),m = StrLength(T);
while ( i<= n-m+1){
SubString(Sub,S,i,m-1);
if (StrCompare(Sub,T)==0)
return i;
else
i++;
}
} //if
printf ( "不存在\n" );
return 0; //S中不存在与T相等的子串
} //Index
/*******************************主函数部分**************************************/
int main()
{
char *chars1 = "abcdefhg" ;
char *chars2 = "defhg" ;
SString S,T;
StrAssign(S,chars1);
StrAssign(T,chars2);
int ANSWER = Index(S,T,1);
printf ( "找到子串T在S中的位置 = %d\n" ,ANSWER);
return 0;
}
|
实现效果:
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
原文链接:http://blog.csdn.net/vit_rose/article/details/52781138