本人新手:遇到问题,请各位大神帮忙一下,不胜感激!
程序代码如下:现在遇到的问题是:1、cout<<"输入q退出,输入1进入系统!"; 执行这一句的时候,输入任意的字符都能进入下面的操作,怎么改可以只在输入1的时候进入系统
2、如何把判断输入的字符串或者数值是不是相应的进制数加到对应的函数体内(如下/* */),如何实现(重新输入)功能?
void AnyBinary2DecConvert::NumConvert(string SrcNum, int ConvertType)
{
int i;
int len = SrcNum.size();
int a[100];
string test;
switch (ConvertType)
{
case BINARY: //2进制
/*for (i=0;i<=len;i++)
{
if (a[i] ==0 ||a[i] ==1)
{
continue;
}
else
{
cout<<"该数据不是二进制数,请重新输入!"<<endl;
}
return;*/
}
case OCTAL: //8进制
case HEX: //16进制
for(i = 0; i < len; i++)
{
m_CovertedNumber += Char2Dec(SrcNum[i]) * pow(ConvertType, len-i-1);//计算ConvertType的len-i-1次幂
}
cout << m_CovertedNumber << endl;
break;
default:
cout << "error" << endl;
break;
}
return;
}
#include <IOSTREAM>
#include <STRING>
#include <CMATH>
#include <CSTDLIB>
using namespace std;
const int BINARY = 2; // 定义2进制数常量
const int OCTAL = 8; // 定义8进制数常量
const int DEC = 10; // 定义10进制数常量
const int HEX = 16; // 定义16进制数常量
const int DEC2ANYBIN = 0; // 10进制转2\8\16进制
const int ANYBIN2DEC = 1; // 2\8\16进制转10进制
class NumConvertMethod//定义一个NumConvertMethod基类 数字转换方法
{
public:
virtual ~NumConvertMethod(){};//虚析构函数
virtual void NumConvert(string SrcNum, int ConvertType) = 0;//简单类型转换 第1个是目标数据类型,第2个是源数据
};
class Dec2AnyBinaryConvert : public NumConvertMethod
{
public:
Dec2AnyBinaryConvert();//构造函数
virtual ~Dec2AnyBinaryConvert();//虚析构函数
virtual void NumConvert(string SrcNum, int ConvertType);
private:
char Dec2Char(char num);
string m_CovertedNumber;
};
class AnyBinary2DecConvert : public NumConvertMethod
{
public:
AnyBinary2DecConvert();//构造函数:二、八、十六进制数转十进制数
virtual ~AnyBinary2DecConvert();//虚析构函数
virtual void NumConvert(string SrcNum, int ConvertType);// 简单类型转换 第1个是目标数据类型,第2个是源数据
private:
int Char2Dec(char &num);
int m_CovertedNumber;
};
class NumConverter//定义一个NumConverter类
{
public:
NumConverter(int converter);//构造函数
~NumConverter();//析构函数
void NumConvert(string SrcNum, int ConvertType);
private:
NumConvertMethod *m_pnumconvertmethod;
};
Dec2AnyBinaryConvert::Dec2AnyBinaryConvert()
{
m_CovertedNumber = "";//定义字符串为""
}
Dec2AnyBinaryConvert::~Dec2AnyBinaryConvert()
{
m_CovertedNumber = "";
}
char Dec2AnyBinaryConvert::Dec2Char(char num) //十进制转换成任意进制
{
if((num <= 9) && (num >= 0))//int类型的转换成字符型
{
num += 48;
}
else
{
switch(num)//把十六进制数中10——15变成A------F
{
case 10:
num='A';
break;
case 11:
num='B';
break;
case 12:
num='C';
break;
case 13:
num='D';
break;
case 14:
num='E';
break;
case 15:
num='F';
break;
default:
break;
}
}
return num;
}
AnyBinary2DecConvert::AnyBinary2DecConvert() //定义构造函数AnyBinary2DecConvert,二、八、十六进制转换十进制
{
m_CovertedNumber = 0;
}
AnyBinary2DecConvert::~AnyBinary2DecConvert()//析构函数
{
m_CovertedNumber = 0;
}
int AnyBinary2DecConvert::Char2Dec(char &num)
{
if((num <= '9') && (num >= '0'))//int类型的转换成字符型
{
num -= 48; //通过ASSCII
}
else
{
switch(num)//把十六进制数中a(A)——f(F)变成10——15
{
case 'A':
case 'a':
num=10;
break;
case 'B':
case 'b':
num=11;
break;
case 'C':
case 'c':
num=12;
break;
case 'D':
case 'd':
num=13;
break;
case 'E':
case 'e':
num=14;
break;
case 'F':
case 'f':
num=15;
break;
default:
break;
}
}
return num;
}
//10进制转2\8\16进制方法
void Dec2AnyBinaryConvert::NumConvert(string SrcNum, int ConvertType)
{
char temp;
int trans = atoi(SrcNum.c_str());//atoi字符串转换成整型数
int i;
switch (ConvertType)
{
case BINARY: //2进制
case OCTAL: //8进制
case HEX: //16进制
while(trans > 0)
{
temp = trans % ConvertType;
m_CovertedNumber += Dec2Char(temp);
trans = trans / ConvertType;
}
for(i = m_CovertedNumber.size()-1; i >= 0; i--)
{
cout << m_CovertedNumber[i];
}
cout << endl;
break;
default:
cout << "error" << endl;
break;
}
return;
}
//2\8\16进制转10进制方法
void AnyBinary2DecConvert::NumConvert(string SrcNum, int ConvertType)
{
int i;
int len = SrcNum.size();
int a[100];
string test;
switch (ConvertType)
{
case BINARY: //2进制
for (i=0;i<=len;i++)
{
if (a[i] ==0 ||a[i] ==1)
{
continue;
}
else
{
cout<<"该数据不是二进制数,请重新输入!"<<endl;
}
return;
}
case OCTAL: //8进制
case HEX: //16进制
for(i = 0; i < len; i++)
{
m_CovertedNumber += Char2Dec(SrcNum[i]) * pow(ConvertType, len-i-1);//计算ConvertType的len-i-1次幂
}
cout << m_CovertedNumber << endl;
break;
default:
cout << "error" << endl;
break;
}
return;
}
NumConverter::NumConverter(int converter)
{
if (converter == DEC2ANYBIN) //十进制转二、八、十六进制
{
m_pnumconvertmethod = new Dec2AnyBinaryConvert();
}
else if (converter == ANYBIN2DEC) //二、八、十六进制转十进制
{
m_pnumconvertmethod = new AnyBinary2DecConvert();
}
else
{
m_pnumconvertmethod = NULL;
}
}
NumConverter::~NumConverter()
{
if (NULL != m_pnumconvertmethod)
{
delete m_pnumconvertmethod;
}
}
void NumConverter::NumConvert(string SrcNum, int ConvertType)
{
m_pnumconvertmethod->NumConvert(SrcNum, ConvertType);
}
// 主控制台,主要实现转换控制!
int main(void)
{
cout<<" #################################################################"<<endl;
cout<<" # 欢迎使用进制数转换计算器 #"<<endl;
cout<<" # 本程序由cccccc制作! #"<<endl;
cout<<" #################################################################"<<endl;
string test;
string kongzhi;
int type=0; //转换类型: 2进制或8进制或16进制
int system=0; //转换选择:10进制转2、8、16进制 或 2、8、16进制转10进制
while (1)//非0时执行
{
cout<<"输入q退出,输入1进入系统!";
cin>>kongzhi;
if ((0, 1, "q", 1) != 0)
{
cout << "请选择转换系统:" << endl;
cout << "0: 十进制 转 二\\八\\十六进制" << endl;
cout << "1: 二\\八\\十六进制 转 十进制" << endl;
cin >> system;
if (system != 0)
{
cout << "请选择转换前类型:" << endl;
cout << "2: 二进制" << endl;
cout << "8: 八进制" << endl;
//cout << "10: 十进制" << endl;
cout << "16: 十六进制" << endl;
}
else
{
cout << "请选择转换后类型:" << endl;
cout << "2: 二进制" << endl;
cout << "8: 八进制" << endl;
//cout << "10: 十进制" << endl;
cout << "16: 十六进制" << endl;
}
cin >> type;
cout<<"请输入数据:";
cin>>test;
NumConverter numconA(system);
numconA.NumConvert(test, type); //转换并输出转换结果
}
else
{
cout << "你已退出本系统!" << endl;
break;
} return 0;
}
return 0;
}
[ 本帖最后由 panhaiyun 于 2013-12-22 12:32 编辑 ]