题目描述 小P最近在研究字符编码,给出一串由0、1组成的字符串,从中任意进行截取,如果截取的字符串对应一个英文字母的ASCII值,小P就把这个0、1串叫字母子串,问给定的字符串最多能截取出多少个字母子串。 输入 测试数据有多组,每组一行由0、1组成的字符串,每行长度不超过10000。 输出 对于每组输入,在一行中输出最多可以截取的字母子串的数量。 样例输入 Copy 1011010111 样例输出 Copy 1 提示 每个字母的ASCII码对应的二进制数都是7位, 1011010 的值是90,对应的是大写字母‘Z’的ASCII码,剩下的是111不对应任何字母,所示只能截取出一个字母子串。
错误代码:‘
#include<iostream> #include<cmath> using namespace std; string str; int main() { int j,i,len,num,sum=0; string arr; cin>>str; str=' '+str; len=str.length(); for(i=1;i<=len-7;i++){ arr.clear(); num=0; arr=str.substr(i,7); // cout<<"arr="<<arr<<endl; for(j=0;j<arr.length();j++) if(arr[j]-'0') num+=pow(2,6-j); if(num>=65&&num<=122) { i+=6; sum++; cout<<"arr="<<arr<<endl; //} } } cout<<sum; }
思路特么的正确,错在a---z 65--90 A----Z 97---122
#include<iostream> #include<cmath> using namespace std; string str; int main() { int j,i,len,num,sum=0; string arr; while(cin>>str){ str=' '+str; len=str.length(); sum=0; for(i=1;i<=len-7;i++){ arr.clear(); num=0; arr=str.substr(i,7); // cout<<"arr="<<arr<<endl; for(j=0;j<arr.length();j++) if(arr[j]-'0') num+=pow(2,6-j); if(num>=65&&num<=90||num>=97&&num<=122) { i+=6; sum++; // cout<<"arr="<<arr<<endl; //} } } cout<<sum<<endl; } }