【问题标题】:Converting int to char and reversing将 int 转换为 char 并反转
【发布时间】:2016-12-02 03:53:25
【问题描述】:

任务是将 int 转换为 char 。这是我的转换代码

#include <conio.h>
#include <stdio.h>

main(void)
{
int number,reserve ;
scanf_s("%d",&number);
if (number > 0 || number == 0)
{
    do
    {
        reserve = number % 10;
        printf("%c", reserve + '/0');
        number /= 10;
    } while (number != 0);
}
else
{
    number *= -1;
    printf("-");
    do
    {
        reserve = number % 10;
        printf("%c", reserve + '/0');
        number /= 10;
    } while (number != 0);

}
_getch();
return 0;
}

问题是打印结果与我想要的相反。所以我正在寻找一种方法来扭转它。但是我的代码是逐字符打印的。可能我只需要将所有字符保存到某个字符串中,但我不确定该怎么做。感谢任何帮助。

【问题讨论】:

  • 所以你想存储这些字符并以相反的顺序打印它们?
  • 是的,你没看错
  • 您是否尝试过将其存储在一个数组中,然后最终以相反的顺序打印该数组?还是堆栈?
  • 我想过数组,但我不知道如何正确编写它
  • @BodoThiesen 评论是讨论relevant but minor or transient information 和 cmets/answers 等帖子问题的好地方。关于OP and SO users 的评论最好在聊天或元中处理。

标签: c


【解决方案1】:

您是否尝试过将它们存储在一个数组中并反向打印该数组?

#include <stdio.h>

int main(void)
{
    int number,reverse,i ;
    scanf("%d",&number);
    char string[20];
    int index = 0;
    if (number< 0){
       number *= -1;
       printf("-");
    }
    do
    {
        reverse = number % 10;
        //printf("%c", reverse);
        string[index++] = reverse;
        number /= 10;
    } while (number != 0);

    for (i = index ; i >= 0 ; i--)
        printf("%c", string[i]);
    return 0;
}

【讨论】:

  • 犯了数百个错误
  • andrewand,这为您提供了足够多的帮助,帮助您了解应该做什么。尝试找出小错误。我又更新了答案。
  • 终于我发现了问题所在,至少我现在有工作代码。欣赏
【解决方案2】:

正如您在问题中假设的那样,您需要存储字符以反向打印它们。

使用数组来完成这项任务非常简单:

// I never know how much memory I need ...
char reverse[200];
int i = 0;
reverse[i++] = next calculated character

稍后

while (i) {
    print reverse[--i];
}

【讨论】:

    【解决方案3】:

    此方法足以将整数转换为字符串,而无需使用任何标准库函数。

    void ReverseString(char *sBuf, int iLength)
    {
        char *String1 = NULL;
        char *String2 = NULL;
    
        for (String1 = sBuf, String2 = sBuf + iLength - 1; String2 > String1; ++String1, --String2)
        {
            *String1 ^= *String2;
            *String2 ^= *String1;
            *String1 ^= *String2;
        }
    }
    
    int YourVeryOwn_itoa(int iINValue, char *sOUTValue)
    {
        unsigned short writePosition = 0;
    
        if (iINValue < 0)
        {
            sOUTValue[writePosition++] = '-';
        }
    
        do
        {
            sOUTValue[writePosition++] = (unsigned char)48 + (iINValue % 10);
        } while ((iINValue /= 10) > 0);
    
        sOUTValue[writePosition] = '\0';
    
        ReverseString(sOUTValue, writePosition);
    
        return writePosition;
    }
    
    void main()
    {
        char buf[255];
        YourVeryOwn_itoa(123456789, buf);
        printf("%s", buf);
    }
    

    【讨论】:

    • 你是在尝试做xor swap吗?这是一个非常糟糕的主意。 void main() 也是个坏主意
    • 我在这里所做的前一个版本实际上提到 XOR 是一个坏主意,因为所有已知的原因(我喜欢它,因为它可以快速输入)。此外,作为示例 void main() 是完全可以接受的。
    猜你喜欢
    • 2020-03-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2015-11-23
    • 2015-12-18
    • 2017-04-25
    相关资源
    最近更新 更多