这道题有多个输入,要求检验输入的常量是否合法,分为检验十进制,十六进制和8进制,如果前缀是0x的就要检验内容每一个字符是否是0-9或者a-f或者A-F,如果前缀是0的就要检验内容每一个字符是否是0-7,如果前缀什么都没有,就是十进制,要检验是不是0-9。
显然这题可以构造三个Bool型函数,分别检查十六进制,八进制,十进制,但是注意一点如:检验内容每一个字符是否是0-9或者a-f或者A-F,怎样确定字符在此范围内呢?用ASCII值就可以了。字符变量可以直接与ASCII码比较在C语言里,char类型的变量存储的就是ASCII码,所以可以直接与整型的数值进行比较。char类型的变量可以看成是一个数。如下列代码中的 if((a[i]>=‘0’&&a[i]<=‘9’)),还有if(a[0]==‘0’);
代码:
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
bool sixteen(char *a){//检查十六进制
int len=strlen(a);
int flag;
for(int i=0;i<len;i++){
if((a[i]>='0'&&a[i]<='9')||((a[i]>='a'&&a[i]<='f'))||((a[i]>='A'&&a[i]<='F'))){
flag=true;
continue;
}
else{
flag=false;
break;
}
}
return flag;
}
bool eight(char *a){//检查八进制
int len=strlen(a);
int flag;
for(int i=0;i<len;i++){
if((a[i]>='0'&&a[i]<='7')){
flag=true;
continue;
}
else{
flag=false;
break;
}
}
return flag;
}
bool tenth(char *a){//检查十进制
int len=strlen(a);
int flag;
for(int i=0;i<len;i++){
if((a[i]>='0'&&a[i]<='9')){
flag=true;
continue;
}
else{
flag=false;
break;
}
}
return flag;
}
int main()
{
char a[120];
bool flag;
while(cin>>a){
if(a[0]=='0'){//先看守卫是否为0
if(a[1]=='x'){//在看第二位是否为x,若是,则为16进制,否则为8进制
flag=sixteen(a);
}
else flag=eight(a);
}
else flag=tenth(a);//首位非零,十进制
if(flag) cout<<"Yes!"<<endl;
else cout<<"No!"<<endl;
}
}
第二次编程:不用在main函数中判断到底输入的是几进制,直接在legal函数中判断各种输入属于什么进制再比较;
代码:
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
void legal(char ch[]){
int len=strlen(ch);
int flag=0;
if(ch[0]=='0'){//1--若第一个字符为零,要么为八进制,要么为十六进制
if(ch[1]=='x'||ch[1]=='X'){//2--若第二个字符为x或X,则确定为16进制,接下来按照16进制的范围一个一个字符筛选
for(int i=2;i<len;i++){
if((ch[i]>='0'&&ch[i]<='9')||(ch[i]>='a'&&ch[i]<='f')||(ch[i]>='A'&&ch[i]<='F')){//3--16进制字符的范围
flag=1;
}
else{//--3不满足十六进制
flag=0;
break;
}
}
}
else{//--2第二个字符不为x或X,则确定为八进制,接下来按照八进制的范围一个一个字符筛选
for(int i=1;i<len;i++){
if(ch[i]>='0'&&ch[i]<='7'){
flag=1;
}
else{
flag=0;
break;
}
}
}
}
else{//--3第一个字符不为0,可确定为10进制
for(int i=0;i<len;i++){
if(ch[i]>='0'&&ch[i]<='9'){
flag=1;
}
else{
flag=0;
break;
}
}
}
if(flag==1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
int main()
{
char ch[20];
while(cin>>ch){
legal(ch);
}
return 0;
}