|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<string.h>
int main()
{
char s1[50] = "hahaha";
char s2[50] = " "; //example:char s2[50] = "abcdef";
char s3[2] = "h";
int i,a,b;
for(i = 0;i < strlen(s2);i++)
{
a = s2[i];
b = s3[0];
if(a == b)
return printf("Sorry");
}
if(!strncmp(s2,s1,i))
printf("Congradulate!");
else
printf("Sorry\n");
return 0;
}
本帖最后由 jackz007 于 2022-10-19 11:34 编辑
本例 12 行要求 s2 中不允许有 'h' 字符,而 13 行又要从头开始逐长度比较 s1 和 s2,两个条件看似冲突,其实不然,还是有空子可钻的。
s2 随便写,只要第一个字符不是 'h' 就可以看到 "Congradulate!",其中的原因是,第 1 个字符不是 'h' 可以过第 12 行的检查,第 13 行的字符串比较会因为 i = 0 (长度为 0)而得到函数值 0,于是,就可以看到 "Congradulate!",至于第 2 个字符及以后,那是要实质性从头比较 s1 和 s2 的,s2 又不允许出现 'h',所以,肯定都不一样,会看到很多的 "Sorry",所以,s2 第 2 个字符安排成字符 'h',可以尽早结束这一切。
- #include<stdio.h>
- #include<string.h>
- int main(void)
- {
- char s1[50] = "hahaha" ;
- char s2[50] = "1h2345678" ; //example:char s2[50] = "abcdef";
- char s3[2] = "h" ;
- int i , a , b ;
- for(i = 0 ; i < strlen(s2) ; i ++) {
- a = s2[i] ;
- b = s3[0] ;
- if(a == b) return printf("Sorry\n") ; // 此句要求 s2 中不可以出现字符 s3[0] 也就是 'h'
- if(! strncmp(s2 , s1 , i)) printf("Congradulate!\n") ; // 此句从头开始比较 s1 和 s2 中的 i 个字符,如果完全相同则打印 "Congradulate!"
- else printf("Sorry\n") ;
- }
- return 0;
- }
复制代码
编译、运行实况:
- D:\[00.Exerciese.2022]\C>g++ -o x x.c
- D:\[00.Exerciese.2022]\C>x
- Congradulate!
- Sorry
- D:\[00.Exerciese.2022]\C>
复制代码
|
|