2011-09-08 227 views
-1

基本上我有一个方法可以将十进制数转换为不同基数中的数字(例如,基数2),数组中位置0的元素是最重要的,例如$ 100,1是最重要的。反转字符串

如果我把一个应该输出AC的字符串,我得到CA(十进制到十六进制)。如何在C中反转这个char数组?

char* decimalToRadixN(int decimalNumber, int radixN, char result[]){ 
    /* 
     If its below base 10, its going to be a digit convertsion (ex to binary) 
     If it's above base 10, we need to call a method to convert the char to a symbol. 
    */ 

     //char swap[] = result[]; 

    int count = 0; 
    while(decimalNumber>0) 
    { 
     int remain = decimalNumber % radixN; 
     result[count] = decimalToSymbol(remain); 
     decimalNumber = decimalNumber/radixN; 
     count++; 
    } 

    /* 
    for(int i = 0; i < count; i++) 
    { 
      reverse the array 
    } 
    */ 
    return result; 
} 
+0

交换元素,直到你到达中间。顺便说一句,你怎么知道'结果'在哪里结束? –

回答

2
int i, j; 
for(i = 0, j = count - 1; i < j; i++, j--) 
{ 
    char temp = result[ i ]; 
    result[ i ] = result[ j ]; 
    result[ j ] = temp; 
} 
result[ count ] = '\0'; 
+0

谢谢你的帮助,克里斯,这正是我需要的。 :-) –

0

不太答案是问的问题,但为什么不只是写在正确的顺序的数字摆在首位?

毫无疑问,你不知道你需要多少位数字,因此从哪里开始写作。

这可以通过将数字记录到基数的基数来完成。这可以使用logarithms的规则来完成。

int numDigitsForRadix(double decimalNumber, double radixN) 
{ 
    double numDigits = log(decimalNumber)/ log(radixN); 
    int intDigits = (int)numDigits + 1; 
    return intDigits; 
} 

[还要注意你的'decimalNumber'永远不是真的小数。它是一个真正二元的C int。这只是命名,并没有区别。它出现在printf()的底数10是printf()的解释,而不是数字本身。]

现在,您已经有了给定基数中的数字位数,只需写入该数字并递减而不是递增。另外,如果传递可用的结果长度,则可以验证所需的可用长度,并返回错误代码(例如NULL),如果是这样的话。

并且不要忘记null结束或者以其他方式提供返回写入字符串长度的支持。