簡體   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