数据结构中定位函数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