题目描述
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
输入
输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
输出
输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
样例
输入 abcde a3 aaaaaa aa
输出 0 3
来源/分类
字符串
代码
以下是C语言程序的代码实现:
#include <stdio.h>
#include <string.h>
int main() {
char cloth[1001], pattern[1001];
while (scanf("%s%s", cloth, pattern) == 2) {
if (cloth[0] == '#' && pattern[0] == '#') {
break;
}
int cloth_len = strlen(cloth), pattern_len = strlen(pattern);
int count = 0;
while (strstr(cloth, pattern) != NULL) {
count++;
char *pos = strstr(cloth, pattern);
for (int i = 0; i < pattern_len; i++) {
pos[i] = ' ';
}
}
printf("%d\n", count);
}
return 0;
}
思路解析
首先,我们需要读入两个字符串,分别表示花布条和小饰条。然后,我们需要在花布条中查找小饰条,计算出能从花布条中剪出的最多小饰条个数。
具体实现时,我们可以使用字符串函数 strstr()
在花布条中查找小饰条。如果找到了小饰条,我们就将其替换成空格,以便下一次查找。每找到一次小饰条,我们就将计数器加一。最后,输出计数器的值即可。
需要注意的是,我们需要在读入两个字符串后判断是否遇到了 #
字符,如果是,则退出循环。同时,我们需要在每个结果之间输出换行符。