[英]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);
}
}
但問題是它不適用於八進制。 如何正確輸入?
在您正在撰寫的關於創建二進制/八進制/十六進制到十進制轉換器的帖子中,但您的代碼僅針對八進制,我的答案將嘗試通用,因此您可以使用它來實現其他情況,但將專注於八進制。
首先,您的代碼有一些與算法本身無關的小問題:
printf
和strlen
function,這不是 C 內置的,需要包含在各自的庫中:#include <stdio.h>
#include <string.h>
l
分配給字符串的長度,但您從未聲明它的類型,因此需要這樣做:l = strlen(str);
n
同樣的問題,它從未被聲明過。 不僅如此,您說n=n*10...
所以 noy 只是不聲明它,您使用它的值.. 您認為n*10
會返回什么? 我的猜測是垃圾。 由於您在循環中使用它,因此您應該在循環本身之外聲明它,所以我建議:int l = strlen(str), n = 0;
好吧,不是我們解決了這個問題,您的八進制轉換代碼實際上幾乎完成了。 算法的唯一問題是n*10...
部分。 如果你將n
乘以10
,你實際上得到了十進制轉換.. 所以十進制到十進制轉換,如果你輸入例如48
你將得到48
作為 output。 我們需要什么來修復它? 將二進制轉換為2
, 8
進制轉換為 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.