繁体   English   中英

如何将八进制数的字符串表示形式转换为十进制?

[英]How to convert string representation of octal number to decimal?

我想制作一个将二进制数转换为十进制、八进制和十六进制的程序。 在接受输入时,我正在考虑他们的标准表示。 例如:八进制是“o10”所以我将 10 转换为十进制,得到 8。

这是我输入字符串并将其转换为十进制的代码:


int main()
{
    int ch=0;
    char str[1000];
    printf("Enter the number\n");
    scanf(" %s",str);
    l=strlen(str);

    for(int j=0;j<l;j++)
    {
        if(str[j]>=48 && str[j]<=57)
            n=n*10+(str[j]-48);
    }
}

但问题是它不适用于八进制。 如何正确输入?

在您正在撰写的关于创建二进制/八进制/十六进制到十进制转换器的帖子中,但您的代码仅针对八进制,我的答案将尝试通用,因此您可以使用它来实现其他情况,但将专注于八进制。

首先,您的代码有一些与算法本身无关的小问题:

  1. 您调用printfstrlen function,这不是 C 内置的,需要包含在各自的库中:
#include <stdio.h>
#include <string.h>
  1. 您将l分配给字符串的长度,但您从未声明它的类型,因此需要这样做:
l = strlen(str);
  1. n同样的问题,它从未被声明过。 不仅如此,您说n=n*10...所以 noy 只是不声明它,您使用它的值.. 您认为n*10会返回什么? 我的猜测是垃圾。 由于您在循环中使用它,因此您应该在循环本身之外声明它,所以我建议:
int l = strlen(str), n = 0;

好吧,不是我们解决了这个问题,您的八进制转换代码实际上几乎完成了。 算法的唯一问题是n*10...部分。 如果你将n乘以10 ,你实际上得到了十进制转换.. 所以十进制到十进制转换,如果你输入例如48你将得到48作为 output。 我们需要什么来修复它? 将二进制转换为28进制转换为 8,六进制转换为16 您的代码仅涉及八进制,因此如果您将此行更改为:

n = n * 8 + (str[j] - 48);

你会得到一个工作八进制转换。 例如,如果运行程序并输入10 ,您将得到8 ,这就是我们想要的。

现在正如我之前提到的,如果你想让它更通用,你应该有一个名为int base = 10;的变量。 您可以根据第一个字符设置,例如:

int base = 10; // default value
if (str[0] == 'o')
{
    base = 8;
}

当然,你可以对其他基地做同样的事情,而且几乎是一样的。 最后,在计算n之后,您实际上从未使用过它的值,因此类似的方法可以检查我们得到的答案:

printf("In Decimal => %d\n", n);

这有点工作,但我们仍然需要检查数字边界。 例如,八进制数不能有大于 7 的数字,而 Hexa 数可以有A作为数字。 在 for 循环中,我们不检查类似的内容。 例如,如果您在代码中输入o48 ,它将打印一个答案40 ,这是不正确的,因为48不是八进制数。

所以你为了完成程序,你需要检查是否边界,并实现碱基检查的rest( h代表六进制, b代表二进制),这个我将留给你。 祝你好运~!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM