C 颠倒字符串
基本上,我有一个方法,可以将十进制数转换为不同基数的数字,例如,基数2,数组中0位置的元素是最重要的,例如$100,1是最重要的 如果我输入一个字符串,该字符串应该输出AC,那么我得到CA Dec到hex。如何在C中反转这个字符数组C 颠倒字符串,c,arrays,c-strings,C,Arrays,C Strings,基本上,我有一个方法,可以将十进制数转换为不同基数的数字,例如,基数2,数组中0位置的元素是最重要的,例如$100,1是最重要的 如果我输入一个字符串,该字符串应该输出AC,那么我得到CA Dec到hex。如何在C中反转这个字符数组 char* decimalToRadixN(int decimalNumber, int radixN, char result[]){ /* If its below base 10, its going to be a digit con
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;
}
这不是问题的答案,但为什么不先把数字按正确的顺序写下来呢 毫无疑问,你不知道你需要多少位数,所以从哪里开始写 这可以通过将数字的日志作为基数来完成。这可以使用的规则 [还要注意的是,您的“小数”从来不是真正的小数。它是一个C int,真正的二进制。这只是命名,没有什么区别。它从printf中显示为基数10是printf的解释,而不是数字本身。] 现在你有了给定基数中的位数,只需对该位数进行写入,然后递减而不是递增 此外,如果您传入结果的可用长度,您可以根据可用长度预先验证所需的长度,并返回错误代码,如NULL(如果是)
不要忘记使用null终止,或者提供返回写入字符串长度的支持。交换元素,直到到达中间位置。顺便说一句,你怎么知道结果会怎样?谢谢你的帮助,克里斯,这正是我所需要的-
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;
}