#include <stdio.h> #include <string.h> #define MAXSTRLEN 100 typedef char SString[MAXSTRLEN+2]; void InputString(SString &str) { // 读取字符串 scanf("%s", str + 1); // 首先用scanf读取字符串 str[0] = strlen(str + 1); // 求出字符串的长度并保存在str[0]中 } int Index(SString S, SString T, int pos) { // 算法4.5 // 返回子串T在主串S中第pos个字符之后的位置。 // 若不存在,则函数值为0。 // 其中,T非空,1≤pos≤StrLength(S)。 int i = pos; int j = 1; while (i <= S[0] && j <= T[0]) { putchar(S[i]); // 只要添加这一句输出相应的字符即可 if (S[i] == T[j]) { // 继续比较后继字符 ++i; ++j; } else { // 指针后退重新开始匹配 i = i - j + 2; j = 1; } } if (j > T[0]){ return i - T[0]; } else return 0; } // Index int main(){ int i; SString S, T; // 定义存储两个字符串的变量 int index = 0; // 存储下标 for(i=0; i<3; i++){ InputString(S); // 读取两个字符串 InputString(T); index = Index(S, T, 1); // 定位子串 printf("\n%d\n", index);// 输出子串的下标 } return 0; } /************************************************************** Problem: 2150 User: admin Language: C++ Result: Accepted Time:11 ms Memory:1144 kb ****************************************************************/