字符串处理的这两种写法有什么区别?

blank__box 2016-10-15 08:24:54
先贴题目!
盐的英文是salt,现在极缺,请找出输入中所有包含salt的行,不管大小写,是salt就要。

Input

若干行包含salt SALT sAlt等等的英文

Output

所有包含salt这个部分的行

Sample Input

Salt is necessary
Water is not sAlt
as salT as you can make it
soy-bean sauce can be saLt
soy-bean sauce only
bean soy-bean sauce

Sample Output

Salt is necessary
Water is not sAlt
as salT as you can make it
soy-bean sauce can be saLt

一下是我的两种写法:

第一种:
#include <stdio.h>
#include <string.h>
int main()
{
while(1)
{
char a[10000]={0};
gets(a);
int flag=0;
int len=strlen(a);
for(int i=0;i<len;i++)
{
if((a[i]=='s'||a[i]=='S')&&(a[i+1]=='a'||a[i+1]=='A')&&(a[i+2]=='l'||a[i+2]=='L')&&(a[i+3]=='t'||a[i+3]=='T'))
{
flag=1;
break;

}
}
if(flag)
puts(a);

}
return 0;
}

以上这种在ACM显示为超时,A不过

第二种:
#include <stdio.h>
#include <string.h>
int main()
{
char a[10000]={0};
while(gets(a))
{
int flag=0;
for(int i=0;i<strlen(a);i++)
{
if((a[i]=='s'||a[i]=='S')&&(a[i+1]=='a'||a[i+1]=='A')&&(a[i+2]=='l'||a[i+2]=='L')&&(a[i+3]=='t'||a[i+3]=='T'))
{
flag=1;
break;

}
}
if(flag)
puts(a);

}
return 0;
}

这种是AC了的


这两者有什么区别?
还有 一般超时是什么原因?
本人新手, 求教!
...全文
296 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-10-17
  • 打赏
  • 举报
回复
死循环或者是代码复杂度过高,算法不够好,运行的次数太多。
当作看不见 2016-10-15
  • 打赏
  • 举报
回复
全部转大写或小写,在查找不更好吗
paschen 2016-10-15
  • 打赏
  • 举报
回复
第一种一直会循环,第二种gets执行失败时会不再循环

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧