作者BlackMatrix (BlackMatrix)
看板C_and_CPP
標題[問題] Boolean Tree
時間Fri Nov 13 12:18:11 2009
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
我正在寫一個Boolean Tree, 跟Binary Tree差不多, 只是我把Leaf都改成Bool, 比如說
&, |, ~ 代表的是我的Operation
T, F, 其他字母 代表著我的True, 跟False, 其他字母比如說X, Y到後面程序會說
"請輸入X跟Y他們的Bool, 也就是T, Or F"
然後做出Tree的時候, 先把一串東西放進去
比如說
TX|F~&
我的樹會變成
&
/ \
| ~
/ \ \
T X F
然後運用Recursion把X找出來, 這裡我會, 可是重點是程序怪怪的
他會想要更改所有的字母, 就算我寫了一個if statement
希望得到的正確結果:
只更改X
程式跑出來的錯誤結果:
全部一起更改
如果用Postfix看的話
全部選F就會變成
outputting postfix
FFFFFFFF
應該是
TF|F~&
而不是
FFFFFF
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
C++
有問題的code: (請善用置底文標色功能)
template <class Object>
void operatorSymbolChange(Node<Object>* Node)
{
if( Node->left != NULL ) //Left
operatorSymbolChange(Node->left);
if( Node->right != NULL ) //Right
operatorSymbolChange(Node->right);
cout << "Currently in " << Node->element << endl;
Object temp = Node->element;
if ((temp != '&') || (temp != '|') || (temp != '~') || (temp != 'F') ||
(temp != 'T'))
{
Object userInput;
cout << "The element " << Node->element << endl;
cout << "Is a symbol, you would need to change it to << endl;
cout << "either T or F" << endl;
cin >> userInput;
int count = 1;
int tempCount = 0;
while (count!=tempCount)
{
if ((userInput == 'T') || (userInput == 'F'))
{
Node->element = userInput;
tempCount++;
}
else
{
cout << "You did not either enter T or F;
cin >> userInput;
}
}
}
else
{
cout << "The item " << Node->element << " is fine" << endl;
}
}
補充說明:
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 173.56.121.140
推 snowlike:第三個if的邏輯是錯的 11/13 13:14
→ BlackMatrix:請問一下為什麼阿? 11/13 13:24
→ BlackMatrix:放兩個recursion是為了讓他已Postfix跑 11/13 13:25
→ BlackMatrix:if statement是讓他測試我的字母到底是不是XYZ等等.. 11/13 13:26
→ BlackMatrix:正確的if statement 應該是 11/13 15:35
→ BlackMatrix:if (node->type == "operandSymbolType") 11/13 15:35
推 snowlike:'&'在第二個條件式進入if,其它符號在第一個條件就進入if 11/13 17:54
→ snowlike:沒看到回文@_@其實更換成&&就可以 11/13 18:04
→ BlackMatrix:喔~~~~~原來是這樣, 害我想了老半天還得加個Type 11/13 23:19
→ BlackMatrix:謝謝~~ 11/13 23:19