题目描述
小P最近在研究字符编码,给出一串由0、1组成的字符串,从中任意进行截取,如果截取的字符串对应一个英文字母的ASCII值,小P就把这个0、1串叫字母子串,问给定的字符串最多能截取出多少个字母子串。
输入
测试数据有多组,每组一行由0、1组成的字符串,每行长度不超过10000。
输出
对于每组输入,在一行中输出最多可以截取的字母子串的数量。
样例输入 Copy
1011010111
样例输出 Copy
1
做的时候太水了,求二进制写错了.话说这题这样写就是对的?当时以为是写法不对,感觉是不是dp??
这些字母的数值范围转化成二进制都是七位,从第一个字母开始,返回七个字符的串,如果是该范围的
数,则ans++,并且i的下标要移到求得串的后一个,若不是该范围的数,则i的下标加一再判断;
#include<iostream>
#include<string>
#include<map>
using namespace std;
int get_num(string a)
{
int sum = 0;
for (int i = 0; i <a.size(); i++)
sum = sum * 2 + a[i] - '0';
return sum;
}
int main(){
string a, b;
while (cin >> a)
{
int ans = 0;
for (int i = 0; i+6 < a.size(); i++)
{
string c = a.substr(i, 7); //截取子串
int num = get_num(c); //转化成数字
if ((num <= 122 && num >= 97) || (num >= 65 && num <= 90))
ans++, i = i + 6;
}
cout << ans << endl;
}
return 0;
}