查找子串在主串中的第pos个字符之后的位置
#define MAXSIZE 100
#include <iostream>
typedef struct
{
char *ch;
int length;
}String;
// 初始化String
void InitString(String&);
// 给一个String赋值
void AssignString(String&);
// BF算法查找子串位置
int Index(const String&, const String&, int);
// // 打印String
// void printString(const String&);
int main()
{
std::cout << "Input String s1: " << std::endl;
String s1;
InitString(s1);
AssignString(s1);
// printString(s1);
std::cout << "Input String s2: " << std::endl;
String s2;
InitString(s2);
std::cin.clear();// 使cin有效
AssignString(s2);
// printString(s2);
std::cout << Index(s1, s2, 1) << std::endl;
return 0;
}
void InitString(String& s)
{
s.ch = new char[MAXSIZE];
s.length = 0;
}
void AssignString(String& s)
{
char c;
while (std::cin >> c && s.length < MAXSIZE)
s.ch[++s.length] = c;
}
int Index(const String& s1, const String& s2, int pos)
{
int i = pos, j = 1;
while (i <= s1.length && j <= s2.length)
{
// std::cout << i << "i: " << s1.ch[i] << std::endl;
// std::cout << j << "j: " << s2.ch[j] << std::endl;
if (s1.ch[i] == s2.ch[j])
{
++i;
++j;
// std::cout << "s1.ch[i] == s2.ch[j]" << std::endl;
}
else
{
i = i-j+2;
j = 1;
}
}
if (i > s1.length+1) return 0;
return i-j;
}
// void printString(const String& s)
// {
// for (int i = 1; i <= s.length; i++)
// std::cout << i << ": " << s.ch[i] << std::endl;
// }