1 条题解
-
0
C :
#include <stdio.h> int main(){ int i,j,k,n,flag; char str[100],sub[100]; // freopen("1.txt","r",stdin); while(scanf("%s %s",str,sub)!=EOF){ i=j=0; while (str[i]&&sub[j]) { printf("%c",str[i]); if (str[i]==sub[j]) { i++; j++; }else{ i=i-j+1; j=0; } } printf("\n"); if (!sub[j]) { printf("%d\n",i-j+1); }else{ printf("0\n"); } } // fclose(stdin); return 0; }
C++ :
#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; }
- 1
信息
- ID
- 1690
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者