题目链接: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;
}