概述
子串查找
时间限制: 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 1000010
char 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("%dn",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("%dn",ans);
}
return 0;
}
最后
以上就是老实小蚂蚁为你收集整理的【练习吧】字符串查找游戏的全部内容,希望文章能够帮你解决【练习吧】字符串查找游戏所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复