ACM 2203 函数暴力解决

HDU 2203 写了半天写到后面发现当循环到i>strlen(s1)-strlen(s2)时,写不下去了
不知道怎么回头表示前面s1的字符,百度之后,发现需要学习什么KMP算法,还不简单,这样可以大大缩短时间,就算暴力匹配的超时版我也没写出来,太菜了。然后就发现了 sprint函数和strstr函数,直接看代码。

#include<stdio.h>
#include<string.h>
int main()
{
 char a[200020],b[100010];
 while(~scanf("%s%s",a,b))
 {
  sprintf(a,"%s%s",a,a);
  if(strstr(a,b))
  printf("yes\n");
  else
  printf("no\n");
 }
}

sprint函数
头文件:stdio.h
函数功能:格式化字符串,将格式化的数据写入字符串中。
函数原型:int sprintf(char *buffer, const char *format, [argument]…)
参数:
(1)buffer:是char类型的指针,指向写入的字符串指针;
(2)format:格式化字符串,即在程序中想要的格式;
(3)argument:可选参数,可以为任意类型的数据;
函数返回值:buffer指向的字符串的长度;
用处:
(1)格字字符串:在这点上sprintf和printf的用法一样,只是打印到的位置不同而已,前者打印给buffer字符串,后者打印给标准输出,所以sprintf也可以用来将整型转化为字符串,比itoa效率高且如此地简便~比如:sprintf(buffer, “%d”, 123456);执行后buffer即指向字符串“123456”~
(2)连接字符。
直接说一下代码中意思,sprintf将俩个s1字符串连接起来,并指向s1,这样就解决了回到字符串开头的尴尬。
strstr函数就很简单,检验s1字符串函数中是否有s2字符串。
这道题就这样AC啦
有时间还是要去学习一下KMP算法,菜鸡头秃了。哭晕了,太难了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值