gpt4 book ai didi

c - 覆盖C中的字符串

转载 作者:行者123 更新时间:2023-11-30 15:23:28 25 4
gpt4 key购买 nike

我正在尝试创建一个代码,将小数转换为 2 到 16 之间的任何基数。但我不知道如何在字符串中写入新值。

void base_conversion(char s[], int x, int b) {
int j, y;
j = 0;
// your code here
while(b > 1 && b < 17) {

if (x < 0) {
x = (-x);
}else if(x == 0) {
s[j] = '\0';
}
x = (x/b);

while(x > 0) {

y = (x%b);


if (y == 10) {
s[j] = 'A';
}else if(y == 11) {
s[j] = 'B';
}else if(y == 12) {
s[j] = 'C';
}else if(y == 13) {
s[j] = 'D';
}else if(y == 14) {
s[j] = 'E';
}else if(y == 15) {
s[j] = 'F';
}else{
s[j] = y;
}
}
}j = j + 1;
}

最佳答案

虽然有几个错误,但你已经快完成了,所以我“改进”了你的代码。无限循环测试仅需完成一次的基础。 while() 循环组织得不太正确 - x/b 是在数字提取循环之外完成的。我所做的另一个改变是使用查找数组将每个数字转换为字符,这节省了很多费力的测试。我还返回了作为函数值传递的字符串 - 也可能添加更多功能。在传递错误基值的情况下,我可以返回 NULL 而不是空字符串。另请注意,我在将 j 用作索引的相同语句中更新了它,这使得代码更加流畅。

#include <stdio.h>

char *base_conversion (char *s, int x, int b) {
char charr[] = "0123456789ABCDEF";
int i, j = 0, len, digit, neg = 0;
*s = 0; // terminate the string passed
if (b < 2 || b > 16) // check the base
return s; // return an empty string
if (x < 0) {
x = -x; // adjust for negative input
neg = 1;
}
do {
digit = x % b; // extract each l.s. digit
s[j++] = charr [digit]; // convert to character
} while (x /= b); // implicitly test for 0

if (neg) // negative input
s[j++] = '-'; // append a minus sign
s[j] = 0; // terminate the string

// reverse the string
len = j;
for (i=0; i<len/2; i++) {
digit = s[i];
s[i] = s[--j]; // pre-decrement j to next char index
s[j] = digit;
}
return s;
}

int main () {
int n;
char strig[65];
for (n=1000; n>=-1000; n-=2000) {
printf ("Binary %d: %s\n", n, base_conversion (strig, n, 2));
printf ("Ternary %d: %s\n", n, base_conversion (strig, n, 3));
printf ("Octal %d: %s\n", n, base_conversion (strig, n, 8));
printf ("Decimal %d: %s\n", n, base_conversion (strig, n, 10));
printf ("Hexadecimal %d: %s\n", n, base_conversion (strig, n, 16));
}
return 0;
}

程序输出:

Binary      1000: 1111101000
Ternary 1000: 1101001
Octal 1000: 1750
Decimal 1000: 1000
Hexadecimal 1000: 3E8
Binary -1000: -1111101000
Ternary -1000: -1101001
Octal -1000: -1750
Decimal -1000: -1000
Hexadecimal -1000: -3E8

关于c - 覆盖C中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28784638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com