首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >int到字符串的转换不能正常工作

int到字符串的转换不能正常工作
EN

Stack Overflow用户
提问于 2021-07-08 23:53:28
回答 5查看 149关注 0票数 1

我正在尝试创建一个将整数转换为字符串的函数,基本上我所做的是以下函数:,当我们从转换中获得数字时,它们是反向的,所以我需要一个反向函数来使它们以正确的方式出现。intostring使用(我认为?我从一些网站上得到的) ascii表,将数字转换为所需的字符串。

问题是:当我输入两位数时,它们的反转方向是错误的(我猜我的反转函数不能很好地工作),在输入了一定数量的数字之后,转换就不再准确了。

反转函数:

代码语言:javascript
复制
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函数:

代码语言:javascript
复制
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);
}   
EN

回答 5

Stack Overflow用户

发布于 2021-07-09 00:02:11

reverse函数中的条件i<len/2错误。

例如,如果字符串长度为2位,则len将为1len/2将为0。因此,当两个字符应该交换时,不会发生交换。

条件应为i<=len/2i<len-i

票数 3
EN

Stack Overflow用户

发布于 2021-07-09 00:26:13

反转函数条件是worng。

如果整数为32,则在字符串反转之前,字符串将为s[0] = '2', s[1] = '3', s[2] = '\0'。因此,在反向函数中,必须将以下交换操作应用为

代码语言:javascript
复制
if number = 32 then len = 2
i = 0 then len - i - 1 = 1
so 0 and 1 will be swaped.
代码语言:javascript
复制
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);
}
票数 1
EN

Stack Overflow用户

发布于 2021-07-09 02:08:25

代码语言:javascript
复制
 /*
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--;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68304931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档