青岛手机建站价格南昌seo实用技巧
题目描述
一个长度为 l l l 的字符串中被反复贴有 boy
和 girl
两单词,后贴上的可能覆盖已贴上的单词(没有被覆盖的用句点表示),最终每个单词至少有一个字符没有被覆盖。问贴有几个 boy
几个 girl
?
输入格式
一行被反复贴有 boy
和 girl
两单词的字符串。
输出格式
两行,两个整数。第一行为 boy
的个数,第二行为 girl
的个数。
样例 #1
样例输入 #1
......boyogirlyy......girl.......
样例输出 #1
4
2
提示
数据保证, 3 ≤ l ≤ 255 3\le l\le255 3≤l≤255,字符串仅仅包含如下字符: .bgilory \texttt{.bgilory} .bgilory。
1.题目分析
输入一段字符串,分别统计boy和girl出现的个数,根据题意两个单词可以相互覆盖,但至少有一个单词未被覆盖。
值得一提的是,这道题是只要有单词的一个字符就能够计数。
2.题目思路
将原文存储字符串数组,两个单词也分别存入数组,先遍历字符串数组,取得每一个字符,
在循环中遍历boy或者girl,之前取得的字符以及后单词长度位的字符与单词数组的每一个字符进行比较,满足一个则标记为1,内层循环结束,
判断标记是否为1,是的话计数器加一,
值得注意的是,进入下一轮循环时,需要将标记变量重置为0.
最后分别打印两个单词的数量。
3.代码实现
#include <stdio.h>
#include <string.h>int main(){char str[255];scanf("%s",str);//存放男女相关的字符char boy[] = "boy";char girl[] = "girl";//boy和girl的数量 m nint m,n;m = 0;n = 0;//标记变量int flag;//计算boy个数for (int i = 0; i < strlen(str); ++i) {flag = 0;for (int j = 0; j < strlen(boy); ++j) {//有一个字符满足则算作一次覆盖if (str[i+j] == boy[j]){flag = 1;}}if (flag == 1){m++;}}//计算girl个数for (int i = 0; i < strlen(str); ++i) {flag = 0;for (int j = 0; j < strlen(girl); ++j) {if (str[i+j] == girl[j]){flag = 1;}}if (flag == 1){n++;}}printf("%d\n",m);printf("%d\n",n);return 0;
}