簡體   English   中英

反轉字符串

[英]Reverse a String

基本上我有一種方法可以將十進制數轉換為不同基數(例如,基數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;
}
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';

不是所問問題的答案,但為什么不首先以正確的順序寫數字呢?

毫無疑問,您不知道需要多少位數,因此不知道從哪里開始書寫。

這可以通過將數字的對數取到基數的底數來完成。 這可以使用對數規則來完成。

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

[也請注意,您的'decimalNumber'絕對不是十進制。 這是一個C int ,真的是二進制。 這只是命名,沒有區別。 使其顯示為從底座10 printf()是解釋printf()而不是數字本身。]

現在您有了給定基數的位數,只需寫入該位數並減而不是遞增即可。

另外,如果您輸入結果的可用長度,則可以預先根據可用長度驗證所需的長度,如果是,則返回錯誤代碼(例如NULL )。

並且不要忘記將null終止,或者以其他方式為返回書面字符串的長度提供支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM