yunyun627 2013-12-22 05:31 采纳率: 100%
浏览 1961
已采纳

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

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

  • 随风—— 2013-12-24 06:22
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 聚类分析或者python进行数据分析
  • ¥15 如何用visual studio code实现html页面
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?