T1116 验证子串
输入两个字符串,验证其中一个串是否为另一个串的子串。
输入格式
输入两个字符串, 每个字符串占一行,长度不超过 200 且不含空格。
输出格式
若第一个串 s1是第二个串 s2的子串,则输出"(s1) is substring of (s2)"
;
否则,若第二个串 s2是第一个串 s1的子串,输出"(s2) is substring of (s1)"
;
否则,输出"No substring"
。
输出时每行末尾的多余空格,不影响答案正确性
样例输入
abc
dddncabca
样例输出
abc is substring of dddncabca
解题思路: 见代码
#include<stdio.h>
#include<string.h>
int i,j,K=0;
char X[201],Y[201];
int judgment(char X[],char Y[]){
for (i=0;i<strlen(X);i++){
for (j=0;j<strlen(Y);){
if (Y[j]==X[i+j])j++;else break;
// (Y[j]==X[i+j])?j++:break;
if (j==strlen(Y)) K=1;
}
}
}
int main()
{
gets(X);
gets(Y);
if (judgment(X,Y))
printf("%s is substring of %s",X,Y);
else if (judgment(Y,X))
printf("%s is substring of %s",Y,X);
else printf("No substring");
return 0;
}
注意:
代码能通过样例测试,但不能提交成功。如果你有更好的方法,可以一起讨论下。如果哪里有错误,欢迎指出。
2020年7月25日修改:
#include<stdio.h>
#include<string.h>
int i,j,K=0;
char X[201],Y[201];
int judgment(char X[],char Y[]){//判断子串
for (i=0;i<strlen(X);i++){//此处为较长的字符串
for (j=0;j<strlen(Y);){//此处为较短的字符串,用于判断与长串是否一致
if (Y[j]==X[i+j]) j++;
else break;
if (j==strlen(Y)){
K=1;break;//一致的话,K=1
}
}
}
return K;
}
void lowerchar(char X[]){//将字符串变成小写字母,此时可忽略字母大小写带来的影响
for (i=0;i<strlen(X);i++)
X[i]+=(X[i]<=90&&X[i]>=65)?32:0;
}
int main()
{
gets(X);
gets(Y);
lowerchar(X);
lowerchar(Y);
if (judgment(X,Y))//判断Y是否为X的子串
printf("%s is substring of %s",Y,X);
else if (judgment(Y,X))//判断X是否为Y的子串
printf("%s is substring of %s",X,Y);
else printf("No substring");
return 0;
}
注意:
代码提交成功。如果你有更好的方法,可以一起讨论下。如果哪里有错误,欢迎指出。