gpt4 book ai didi

c - 修改基数转换

转载 作者:行者123 更新时间:2023-11-30 17:54:59 27 4
gpt4 key购买 nike

我在尝试进行修改时遇到了心理障碍 数基转换器。

我所拥有的工作正常,但是我想要输出 用我正在使用的基数的第 0 个字符填充。

例如,如果我使用基数 3

int n,v;
char txt[100];
for(n=0;n<5;n++)
{
ToBase(3,n,txt);
FromBase(3,&v,txt);
printf("\n m=%u txt=[%s] i=%u",n,txt,v);
}

输出:

 m=0 txt=[A] i=0
m=1 txt=[B] i=1
m=2 txt=[C] i=2
m=3 txt=[BA] i=3
m=4 txt=[BB] i=4
m=5 txt=[BC] i=5
m=6 txt=[CA] i=6
m=7 txt=[CB] i=7
m=8 txt=[CC] i=8
m=9 txt=[BAA] i=9

我需要的输出是:

 m=0 txt=[A] i=0
m=1 txt=[B] i=1
m=2 txt=[C] i=2
m=3 txt=[AA] i=3
m=4 txt=[AB] i=4
m=5 txt=[AC] i=5
m=6 txt=[BA] i=6
m=7 txt=[BB] i=7
m=8 txt=[BC] i=8
m=9 txt=[CA] i=9

以下是函数:

void ToBase(int base,int num,void* str)
{
char * tbl="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char buf[66] = {'\0'};
char * out;
int n;
int i,len=0,neg=0;

if(base>26)
oof;

n = ((neg = num < 0)) ? (~num) + 1 : num;
do {
buf[len++] = tbl[n % base];
} while(n /= base);

out=(char*)str;
for (i = neg; len > 0; i++)
out[i] = buf[--len];
}


void FromBase(int base,int* num,void* str)
{
int i,d,n,sl;
char*bp;
bp=(char*)str;
sl=strlen(bp);
i=0;
for(n=0;n<sl;n++)
{
i*=base;
if(bp[n]>='A'&&bp[n]<='Z')
d=(bp[n]-'A');
else if(bp[n]>='a'&&bp[n]<='z')
d=(bp[n]-'a');
i+=d;
}
*num=i;
}

任何帮助将不胜感激 -

最佳答案

您需要添加一个功能,以便它知道要输出多少个字符。只需进行最小的更改:

     void ToBase                 (int base,int num,void* str,int min_length)
{
char * tbl="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char buf[66] = {'\0'};
char * out;
int n;
int i,len=0,neg=0;
if(base>26) oof; /* is a macro? perhaps use assert() */
n = ((neg = num < 0)) ? (~num) + 1 : num;
do { buf[len++] = tbl[n % base]; } while(n /= base||--min_length>0);
out=(char*)str;
for (i = neg; len > 0; i++) out[i] = buf[--len];
}

关于c - 修改基数转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14616549/

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