頁:
[1]
[C++] 八進位數值的轉換
Q:輸入一個八進位數值,並將此八進位數值以二進位格式及十進位格式輸出我從課本和網路上找到的部分
比較常看到10進位轉換(或者 頗難的16進位轉換精簡版)
而自己改寫後... 雖然compile會過
執行時→發現有時候輸入(八進位數值) 仍計算錯誤!!
目前只知道十進位的表示法→自己是程式新手,可能寫法都比較笨拙
如果有更好的寫法 或者比較簡單的方式(還請多多包涵、指點)
至於,如何將八進位數值轉成二進位,不知道該怎麼修改
希望大家能給些建議,互相分享討論....Thanks ^^
Code:
#include <iostream>
#include <cstdlib>
#include <string>
#include <sstream>
using namespace std;
int main()
{
string number;
string input1="請輸入任意(八進位)數值: ";
cout<<input1;
cin>>number;
std::string data= number;
std::stringstream sstr(data);
int in_int=0;
char in_char=' ';
std::cout.setf(std::ios::dec);
while(sstr >> in_char)
{
if(in_char=='O')
sstr >> std::oct >> in_int;
else if(in_char=='0')
sstr >> in_char >> std::hex >> in_int;
else
{
long pos=sstr.tellg();
sstr.seekg(pos-1);
sstr >> std::dec >> in_int;
}
std::cout << in_int << std::endl;
}
system("pause");
return 0;
}
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div> 本帖最後由 trtc008056 於 2011-8-24 01:13 AM 編輯
通常我的作法
未知進位-->10-->2
但是如果是這到題目的話
會變成
8--->2--->10
比較好處理
程式碼:
http://codepad.org/7ycSjp6s
有一些小bug
1.他不會去檢查是否為正確的8進位
2.因為都是用int,所以輸入三位數以上的恐怕會爆掉(overflow)
3.程式有點醜,請見諒。
另外,有些看不太懂你的程式
我寫的存脆做計算(計概上面寫的...)
轉換方法
10->...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 謝謝版主 這麼用心的將計算原理
也舉例說明,這樣有比較清楚些~
程式的部分 我會在Try看看(慢慢了解中...) 一般在電腦內作這種進至轉換的程式. 通常只有一個目的.
就是把 整數(int). 要輸出顯示時的轉換
或是輸入的數字字串轉換成整數(int)
note : 用 cout 輸出一個整數其時也要作這種轉換, 只是 C++ 的library 幫你作掉了
基本上很少有人會把一個 int 的內容. 用每一個十近位的位數當作是另一個進位的一個位數.
因為這樣子跟本無法運算.
也因為如此. 所以. 我就寫一個 8 進位字串, 轉換成 2 進為字串的程式把
#include <iostream>
#include <string>
std::string OctSToBinS(const std::string &oct)
{
char *p[]={"000","001","010","011","100","101","110","111"};
std::string bin;
for( unsigned i = 0 ; i < oct.size() ; ++i)
{
if( oct >= '0' && oct <= '7' )
{
bin += p-'0']; // 使用查表法. 這只有在8進位轉2 進位才能用(or 16 轉2 也能用, 8 近位的一個位數其實就是3 個bit . 所以. 可以這樣子寫
}
else break; // 不是 8 進位數字不轉了
}
return bin;
}
int main(int argc, char* argv[])
{
std::string oct=OctSToBinS("12345670");
std::cout << oct << std::endl;
return 0;
}
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 回復 4# iseeyou
比較少在用C++
不知道string可以和char*一起用
如果是我的話可能會用strcat把他們接起來~~<br><br><br><br><br><div></div> 回復 1# ezschool6307
eyny 不給我貼原始碼
這個給你參考:
http://chopapp.com/#rc48lafb
---- OK!! 謝謝各位大大的熱烈回應~
真的受益良多 ^^
原來...論壇中好多高中群集呢(佩服)
小弟會嘗試把這些建議的修改部分
融入在自己的程式裡 3Q 八進位轉二進位的方法就是建表直接作轉換就行了
0→000
1→001
…
7→111
而二進位轉十進位的方法就是直接用乘的
頁:
[1]