[英]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.