开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情
[传智杯 #4 决赛] 小智的疑惑
题目描述
传智专修学院给了小智一个仅包含小写字母的字符串 ,他想知道,里面出现了多少次子串 chuanzhi 呢。
我们称一个字符串 是 的子串,当且仅当将 的开头若干个(可以为 0 个)连续字符和结尾若干个(可以为 0 个)连续字符删去后,剩下的字符串和 相同。例如,我们称 ab 是 abc 的子串,但 ac 不是 abc 的子串。
输入格式
输入只有一行一个字符串,表示字符串 。
输出格式
输出一行一个整数表示答案。
样例 #1
样例输入 #1
welcometochuanzhicupchuanzhi
样例输出 #1
2
提示
数据规模与约定
对于全部的测试点,保证 , 表示 的长度,且 中只有小写字母。
思路分析
刚开始一看题目,题意非常的简单容易理解,但是会发现一个问题,查找子串会很麻烦,那么有没有什么封装好的东西来帮助我们来实现这些东西呢?
毫无疑问是有的,这就要讲到STL容器中封装的string容器了
string的使用
string的使用只要在前面编译的#那块加上以下代码即可
#include<string>
string的find函数
string中的查找函数非常的好用
find函数的形参是一个字符串,返回值是一个整数,对于这个整数很有讲究
- 如果在字符串中找到了子串,那么pos返回值就是子串开头的字符串索引下标
- 如果未找到子串,返回值是-1
string的替换函数
使用方式:s.replace(int a,int b,string str);
- a:此参数是替换的起始位置
- b:此参数是替换的长度
- str:此参数是以a起始,b为长度的一段字符串要替换的内容
代码展示
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
cin >> s;
string str = "chuanzhi";
int res = 0;
int pos = s.find(str);//没找到就是-1
while (pos != -1) {
s.replace(pos, 8, "");
pos = s.find(str);//没找到就是-1
res++;
}
cout << res;
return 0;
}
PS:这题可以说是比较简单的一题了~