到system.string我写了一个程序写在不同的基地数(基数为10,二进制,基地53,无论...)焦炭在windowsforms
我inicially写它作为一个Win32控制台应用程序,在视觉C++ 2010,然后将其转换为Windows窗体应用程序(我知道,我知道...)
在原始形式,它的工作完美,但转换后,它停止工作。我缩小的问题这样:
该程序使用,其接收数字,并返回一个字符的函数:
char corresponding_digit(int digit)
{
char corr_digit[62] = {'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P' ,'Q','R','S' ,'T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p' , 'q','r','s' ,'t','u','v','w','x','y','z'};
return corr_digit[digit];
}
这个函数有数字1到61,并返回对应的字符:0- 9→0-9; 10-35 - > A-Z; 36-61 a-> z。
程序使用这样的功能:
//on a button click
//base is an integer got from the user
String^ number_base_n = "";
if(base == 10)
number_base_n = value.ToString();
else if(base==0)
number_base_n = "0";
else
{
int digit, power, copy_value;
bool number_started = false;
copy_value = value;
if(copy_value > (int)pow(float(base), MAX_DIGITS)) //cmath was included
number_base_n = "Number too big";
else
{
for(int i = MAX_DIGITS; i >= 0; i--)
{
power = (int)pow(float(base), i);
if(copy_value >= power)
{
digit = copy_value/power;
copy_value -= digit*power;
number_started = true;
number_base_n += corresponding_digit(digit);
}
else if (number_started || i==0)
{
number_base_n += "0";
}
}
}
}
textBox6->Text = number_base_n;
调试了一下后,我才意识到问题发生时功能corresponding_digit被调用位值“1”,这应该返回“1”,在表达
//number base_n equals ""
number_base_n += String(corresponding_digit(digit));
//number_base_n equals "49"
number_base_n,起始于“49”,这实际上是1。ASCII值我的在线搜索“结束于”,并且所有我被转换的结果,与字符串(值)或值.ToString(),但显然我不能这样做
number_base_n += corresponding_digit(digit).ToString();
我试图用一个附配的变量:
aux = corresponding_digit(digit);
number_base_n += aux.ToString();
,但我得到了完全相同的(错误)结果...(同样的事情字符串(值))
我周围失手有点多,但我相信没有什么值得一提的。 那么......有什么帮助?
另外:基地10和基地0的正常使用
编辑:如果downvoter会照顾发表意见,并解释他为什么downvoted ...建设性的批评,我认为这是项。
您提供的信息量非常大。首先是:改变为System :: Char就像魅力一样工作。问题解决了,非常感谢。一旦完成托管数组,我将查看StringBuilder。之前我曾试图实现它,但由于它是一个小型项目,运行时间很少,数组的使用非常基本,我使用了基本数组。但是,我想,我应该习惯这种更有效的解决方案。再次谢谢你。 – Sampaio