我正在尝试创建一个将整数转换为字符串的函数,基本上我所做的是以下函数:,当我们从转换中获得数字时,它们是反向的,所以我需要一个反向函数来使它们以正确的方式出现。intostring使用(我认为?我从一些网站上得到的) ascii表,将数字转换为所需的字符串。
问题是:当我输入两位数时,它们的反转方向是错误的(我猜我的反转函数不能很好地工作),在输入了一定数量的数字之后,转换就不再准确了。
反转函数:
char reverse(char *stringa) {
int len = strlen(stringa) - 1;
for(int i = 0; i < len / 2; i++) {
char tmp = stringa[i];
stringa[i] = stringa[len - i];
stringa[len - i] = tmp;
}
}intostring函数:
void intostring(int num, char *str) {
int i = 0;
while (num != 0) {
int rem = num % 10;
str[i++] = (rem > 9)? (rem-10) + 'a' : rem + '0';
num = num / 10;
}
str[i] = '\0';
reverse(str);
} 发布于 2021-07-09 00:02:11
reverse函数中的条件i<len/2错误。
例如,如果字符串长度为2位,则len将为1,len/2将为0。因此,当两个字符应该交换时,不会发生交换。
条件应为i<=len/2或i<len-i。
发布于 2021-07-09 00:26:13
反转函数条件是worng。
如果整数为32,则在字符串反转之前,字符串将为s[0] = '2', s[1] = '3', s[2] = '\0'。因此,在反向函数中,必须将以下交换操作应用为
if number = 32 then len = 2
i = 0 then len - i - 1 = 1
so 0 and 1 will be swaped.void reverse(char *stringa){
int len = strlen(stringa);
for(int i = 0; i < len / 2; i++){
char tmp = stringa[i];
stringa[i] = stringa[len - i - 1];
stringa[len - i - 1] = tmp;
}
}
void intostring(int num, char *str)
{
int i = 0;
if(num == 0){
str[i++] = '0';
str[i] = '\0';
}
else if(num > 0){
while(num != 0){
int rem = num % 10;
str[i++] = '0' + rem;
num = num/10;
}
str[i] = '\0';
}
else{
while(num != 0){
int rem = num % 10;
/*
(-5/2) => -2
-2 * 2 => -4
so a%b => -1
(5/-2) => -2
-2 * -2 => 4
so a%b => 1
*/
rem = abs(rem); // as the rem value is negative
str[i++] = '0' + rem;
num = num/10;
}
str[i++] = '-';
str[i] = '\0';
}
reverse(str);
}发布于 2021-07-09 02:08:25
/*
It works clearly . Checked.
*/
void reverse(char source[],char destination[]) {
int x,i;
//start from last char
i = i=(strlen(source)-1
for (x=0;x<strlen(source);x++){
//Insert char at i in source to x in destination
destination[x]=source[i];
destination[x]='\0';
i--;
}
}https://stackoverflow.com/questions/68304931
复制相似问题