题目链接:http://acm.zzuli.edu.cn/problem.php?id=2328
时间限制: 1 Sec 内存限制: 128 MB
题目描述
小P最近在研究字符编码,给出一串由0、1组成的字符串,从中任意进行截取,如果截取的字符串对应一个英文字母的ASCII值,小P就把这个0、1串叫字母子串,问给定的字符串最多能截取出多少个字母子串。
输入
测试数据有多组,每组一行由0、1组成的字符串,每行长度不超过10000。
输出
对于每组输入,在一行中输出最多可以截取的字母子串的数量。
样例输入
1011010111
样例输出
1
提示
每个字母的ASCII码对应的二进制数都是7位, 1011010 的值是90,对应的是大写字母‘Z’的ASCII码,剩下的是111不对应任何字母,所示只能截取出一个字母子串。
解题思路
因为每个字母的ASCII码对应的二进制数都是7位,故我们只需要7个7个的判断就行了。
#include <stdio.h>
#include <string.h>
int main() {
int len, cnt;
char str[10005];
while (~scanf("%s", str)) {
cnt = 0;
len = strlen(str);
for (int l = 0; l <= len - 7; l++) {
int ans = 0;
for (int i = l; i < l + 7; i++)
ans = ans * 2 + str[i] - '0';
if (ans >= 'A' && ans <= 'Z' || ans >= 'a' && ans <= 'z')
cnt++, l += 6;
}
printf("%d\n", cnt);
}
return 0;
}