反转字符串

时间:2011-09-08 20:56:04

标签: c arrays c-strings

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

如果我输入一个应该输出AC的字符串,我得到CA(Dec到十六进制)。如何在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;
}

2 个答案:

答案 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';

答案 1 :(得分: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终止,或以其他方式提供对返回书写字符串长度的支持。