(substr strstr 的学习) EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) G1. 唐纳德与子串 (Easy)
2017-12-09 19:18
363 查看
substr :主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度。如果没有指定长度_Count或_Count+_Off超出了源字符串的长度,则子字符串将延续到源字符串的结尾。例:string str , temp; temp= str.substr ( begin ,end );//含义为temp可以得到str从begin到end下标位置的字符数组
strstr : strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
子串的定义是在一个字符串中连续出现的一段字符。这里,我们使用 s[l…r] 来表示 s 字符串从 l 到 r(闭区间)的子串。在本题中,字符串下标从 0 开始。显然,对于长度为 n 的字符串共有 n(n+1)2 个子串。对于一个给定的字符串 s,唐纳德给出 q 次询问,第 i 次询问包括三个参数 li,ri,zi,问在 s[li…ri] 的所有子串中共有多少个恰好为 zi
Input
输入具有如下形式:sql1 r1 z1l2 r2 z2⋮lq rq zq第一行一个字符串 s。第二行一个整数 q。接下来每行:首先两个整数 li,ri (0≤li≤ri<|s|),然后是一个非空字符串 zi。整数和整数,整数和字符串间以单空格隔开。字符串中只会出现 26 个小写英文字母。数据规模约定:
对于 Easy 档:1≤|s|≤100,q≤∑|zi|≤100。
对于 Hard 档:1≤|s|≤105,q≤∑|zi|≤105。
Output
对于每次询问,输出一个整数,表示答案。
Examples
input
thisisagarbagecompetitionhahaha
5
0 30 a
1 5 is
25 30 hah
6 12 ag
7 12 ag
output
6
2
2
2
1
strstr : strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
子串的定义是在一个字符串中连续出现的一段字符。这里,我们使用 s[l…r] 来表示 s 字符串从 l 到 r(闭区间)的子串。在本题中,字符串下标从 0 开始。显然,对于长度为 n 的字符串共有 n(n+1)2 个子串。对于一个给定的字符串 s,唐纳德给出 q 次询问,第 i 次询问包括三个参数 li,ri,zi,问在 s[li…ri] 的所有子串中共有多少个恰好为 zi
Input
输入具有如下形式:sql1 r1 z1l2 r2 z2⋮lq rq zq第一行一个字符串 s。第二行一个整数 q。接下来每行:首先两个整数 li,ri (0≤li≤ri<|s|),然后是一个非空字符串 zi。整数和整数,整数和字符串间以单空格隔开。字符串中只会出现 26 个小写英文字母。数据规模约定:
对于 Easy 档:1≤|s|≤100,q≤∑|zi|≤100。
对于 Hard 档:1≤|s|≤105,q≤∑|zi|≤105。
Output
对于每次询问,输出一个整数,表示答案。
Examples
input
thisisagarbagecompetitionhahaha
5
0 30 a
1 5 is
25 30 hah
6 12 ag
7 12 ag
output
6
2
2
2
1
#include<iostream> #include<string> #include<cstdio> #include<algorithm> #include<cmath> #include<iomanip> #include<queue> #include<cstring> #include<map> using namespace std; typedef long long ll; int main() { string str,z,temp; int t; cin>>str; cin>>t; while(t--) { int s,e,num=0; cin>>s>>e>>z; int len=z.length(); for(int i=s;i<=e-len+1;i++) { temp=str.substr(i,len);//长度 if(temp==z) num++; } cout<<num<<endl; } return 0; }自己写的判断子串
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int main() { char s[105],z[105]; int q,l,r; scanf("%s",s); scanf("%d",&q); int len=strlen(s); while(q--) { scanf("%d %d %s",&l,&r,z); int lz=strlen(z),cnt=0; for(int i=l;i<=r-lz+1;i++) { int flag=0,k=i; for(int j=0;j<lz;j++,k++) { if(s[k]!=z[j]){ flag=1; break; } } if(flag==0) cnt++; } printf("%d\n",cnt); } }
相关文章推荐
- (substr strstr 的学习) EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) G1. 唐纳德与子串 (Easy)
- (substr strstr 的学习) EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) G1. 唐纳德与子串 (Easy)
- (substr strstr 的学习) EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) G1. 唐纳德与子串 (Easy)
- (substr strstr 的学习) EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) G1. 唐纳德与子串 (Easy)
- (substr strstr 的学习) EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) G1. 唐纳德与子串 (Easy)
- (substr strstr 的学习) EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) G1. 唐纳德与子串 (Easy)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔)G1. 唐纳德与子串 (Easy)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) A. 唐纳德先生和假骰子
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔)比昨天更多的棒棒糖 (Easy)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) 在哈尔滨的寒风中 (棋盘跳马对数)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔)B. 在哈尔滨的寒风中 (xjbg)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) 在哈尔滨的寒风中 (棋盘跳马对数)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) B题
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) 在哈尔滨的寒风中 (棋盘跳马对数)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) 在哈尔滨的寒风中 (棋盘跳马对数)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) 在哈尔滨的寒风中 (棋盘跳马对数)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) 在哈尔滨的寒风中 (棋盘跳马对数)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) 在哈尔滨的寒风中 (棋盘跳马对数)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) B. 在哈尔滨的寒风中【思维枚举】
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) - A,B,C,G1