2 u013243466 u013243466 于 2013.12.22 13:31 提问

本人是新手,这个程序还有没实现的一点小问题,调试了很久都没有结果!求帮助!
c++

程序代码如下:
现在遇到的问题是: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
#include
#include
#include

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<<" #################################################################"< cout cout cout 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 cin>>kongzhi;
if (kongzhi.compare(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;
}

1个回答

WZY31014332886
WZY31014332886   2013.12.24 14:22
已采纳

1.string kongzhi 改为 int kongzhi;
if(kongzhi == 1)
{
进入系统
}
else if(kongzhi == (int)('q') || kongzhi == int('Q'))
{
//退出系统
}
else
{
//输入不正确
}

2.判断一个数是由什么进制组成不可能,只能人为告诉 如输入一个 8 它即可以是十进制的8 也可以是十六进制的8 你没有办法进行程序判断它是属于那个进制的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!