字符串查找游戏

来源:互联网 发布:现在的淘宝太坑了女孩 编辑:程序博客网 时间:2024/05/01 08:41

子串查找
时间限制: 5 Sec 内存限制: 256 MB
提交: 63 解决: 23

题目描述
给定一个字符串 A 和一个字符串 B,求 B 在 A 中的出现次数。
A 中不同位置出现的 B 可重叠。

输入
输入共两行,分别是字符串 A 和字符串 B。

输出
输出一个整数,表示 B 在 A 中的出现次数。

样例输入
zyzyzyz
zyz

样例输出
3

提示
1≤A,B 的长度 ≤10的6次方 ,A 、B 仅包含大小写字母。

错误代码:
【原因:①题目并没说只输入一次就可以了;②对字符串函数的不熟练;】

#include<stdio.h>#include<string.h>#define maxn 1000010char a[maxn];char b[maxn];int main(){    scanf("%s%s",a,b);    int m=0,n=0,num=0;    m=strlen(a);    n=strlen(b);    for(int i=0;i<m;i++)    {        int j=0;        while(a[i+n-1]==b[n-1])        {            if(a[i]!=b[j])            {                break;            }            else            {                i++;                j++;            }            num++;        }    }    printf("%d\n",num);    return 0;}

用到一个函数:

函数名: strstr
功 能: 查找在串中查找指定字符串的第一次出现后的所有串
用 法: char *strstr(char *str1, char *str2);
程序例:

#include <stdio.h>#include <string.h>int main(){   char *str1 = "Borland International", *str2 = "nation", *ptr;   ptr = strstr(str1, str2);   printf("The substring is: %s.\n", ptr);   return 0;}

输出的答案是:
The substring is: national.
注意不是:nation.


AC具体代码如下:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;char a[1000010],b[1000010];int main(){    while(cin>>a>>b)    {        int ans=0;        char *p;        p=strstr(a,b);        while(p)        {            ans++;            p++;            p=strstr(p,b);        }        printf("%d\n",ans);    }    return 0;}
原创粉丝点击