1 #include<string.h> 2 #include<string> 3 #include<iostream> 4 using namespace std; 5 #define OK 1 6 #define ERROR 0 7 #define OVERFLOW -2 8 typedef int Status; 9 #define MAXSIZE 100 10 //定义串结构体 11 typedef struct{ 12 char *ch; 13 int length; 14 }SString; 15 16 Status initStr(SString &S) 17 { 18 S.ch= new char[MAXSIZE]; 19 S.length=0; 20 } 21 Status StrAssign(SString &T, string chars) { //生成一个其值等于chars的串T 22 int i; 23 if (chars.length() > MAXSIZE) 24 return ERROR; 25 else { 26 T.length = chars.length(); 27 for (i = 1; i <= T.length; i++) 28 T.ch[i] = chars[i-1]; 29 return OK; 30 } 31 } 32 33 //算法4.1 BF算法 34 int Index(SString S, SString T, int pos) 35 { 36 //返回模式T在主串S中第pos个字符之后第s一次出现的位置。若不存在,则返回值为0 37 //其中,T非空,1≤pos≤StrLength(S) 38 int i = pos; 39 int j = 1; 40 while(i <= S.length&&j <= T.length) 41 { 42 if(S.ch[i]==T.ch[j]) 43 { 44 ++i; 45 ++j; 46 } //继续比较后继字符 47 else 48 { 49 i=i-j+2; 50 j=1; 51 } //指针后退重新开始匹配 52 } 53 if (j > T.length) 54 return i - T.length; 55 else 56 return 0; 57 return 0; 58 }//Index 59 60 int main() 61 { 62 SString S,T; 63 initStr(S); 64 initStr(T); 65 string a="bbaaabbaba"; 66 string b="abb"; 67 StrAssign(S,a) ; 68 StrAssign(T,b) ; 69 cout<<"主串和子串在第"<<Index(S,T,1)<<"个字符处首次匹配 "; 70 return 0; 71 } 72 #include<string.h> 73 #include<string> 74 #include<iostream> 75 using namespace std; 76 #define OK 1 77 #define ERROR 0 78 #define OVERFLOW -2 79 typedef int Status; 80 #define MAXSIZE 100 81 //定义串结构体 82 typedef struct{ 83 char *ch; 84 int length; 85 }SString; 86 87 Status initStr(SString &S) 88 { 89 S.ch= new char[MAXSIZE]; 90 S.length=0; 91 } 92 Status StrAssign(SString &T, string chars) { //生成一个其值等于chars的串T 93 int i; 94 if (chars.length() > MAXSIZE) 95 return ERROR; 96 else { 97 T.length = chars.length(); 98 for (i = 1; i <= T.length; i++) 99 T.ch[i] = chars[i-1]; 100 return OK; 101 } 102 } 103 104 //算法4.1 BF算法 105 int Index(SString S, SString T, int pos) 106 { 107 //返回模式T在主串S中第pos个字符之后第s一次出现的位置。若不存在,则返回值为0 108 //其中,T非空,1≤pos≤StrLength(S) 109 int i = pos; 110 int j = 1; 111 while(i <= S.length&&j <= T.length) 112 { 113 if(S.ch[i]==T.ch[j]) 114 { 115 ++i; 116 ++j; 117 } //继续比较后继字符 118 else 119 { 120 i=i-j+2; 121 j=1; 122 } //指针后退重新开始匹配 123 } 124 if (j > T.length) 125 return i - T.length; 126 else 127 return 0; 128 return 0; 129 }//Index 130 131 int main() 132 { 133 SString S,T; 134 initStr(S); 135 initStr(T); 136 string a="bbaaabbaba"; 137 string b="abb"; 138 StrAssign(S,a) ; 139 StrAssign(T,b) ; 140 cout<<"主串和子串在第"<<Index(S,T,1)<<"个字符处首次匹配 "; 141 return 0; 142 } 143 #include<stdio.h> 144 #define N 101 145 char A[N],B[N]; 146 int BF(char a[],char b[]) 147 { 148 int i=0,j=0; 149 while(a[i]&&b[j]){ 150 if(a[i++]==b[j]) 151 ++j; 152 else{ 153 i-=j; 154 j=0; 155 } 156 } 157 return b[j]?-1:i-j+1; 158 } 159 int main(){ 160 gets(A); 161 gets(B); 162 printf("%d ",BF(A,B)); 163 return 0; 164 } 165 #include<stdio.h> 166 #include<string.h> 167 char a[101],b[101]; 168 int main(){ 169 int m,n; 170 int x=1,y=1; 171 gets(a); 172 gets(b); 173 m=strlen(a); 174 n=strlen(b); 175 printf("%d %d ",m,n); 176 int i=1,j=1; 177 while(i<m&&j<n){ 178 if(a[i]==b[j]){ 179 i++; 180 j++; 181 } 182 else{ 183 i=i-j+2; 184 j=1; 185 } 186 } 187 if(j>n) 188 printf("%d",i-j+2); 189 else 190 printf("-1"); 191 return 0; 192 }