Sai là sai thế nào. Bạn nghĩ một người đến include mấy cái thư viện chuẩn mà còn sai lại post được hơn 600 bài ở cái forum này à
.
Chuẩn mới của C++ là header không kèm ".h", các object đều nằm trong namespace std. Không sai đâu bạn.
Code của mình, bạn có thể tham khảo qua, mình nghĩ đây là code tối ưu nhất đối với mảng.
C++ Code:
#include <iostream> #include <string> #define maxx 255 using namespace std; struct anode{ char ope; int val; }; struct node{ char ope; int val; node *l,*r; }; char num[10]={'0','1','2','3','4','5','6','7','8','9'}; char ope[4]={'+' , '-' , '*' , '/'}; void read(string&); void write(anode[],int); bool isope(char); bool isnum(char); int power(int,int); int ctoi(char[],int); int prio(char); void get(string,anode[],int&); int main(){ string expr; anode suff[maxx]; int n = 0; read(expr); get(expr,suff,n); write(suff,n); fflush(stdin); getchar(); return 0; } void read(string &expr){ } void write(anode suff[],int n){ for (int i = 0;i < n;i++) } bool isope(char c){ int i = 0; while ((i < 4)&&(c != ope[i])) ++i; if (i < 4) return true; else return false; } bool isnum(char c){ int i = 0; while ((i < 10)&&(c != num[i])) ++i; if (i < 10) return true; else return false; } int power(int x,int y){ int p = 1; for (int i = 0;i < y;i++) p *= x; return p; } int ctoi(char c[],int n){ int m = 0; for (int i = 0; i <= n;i++){ int j = 0; while ((j < 10)&&(c[i] != num[j])) j++; m += j*power(10,n-i); } return m; } int prio(char c){ if (c == '$') return 0; else if ((c == '(')||(c == ')')) return 1; else if ((c == '+')||(c == '-')) return 2; else return 3; } void get(string expr,anode suff[],int& n){ char cnum[5],stack[maxx]; int m,top = 0,i = 0; stack[top] = '$'; while (i < expr.size()){ if (isope(expr[i])) if (prio(expr[i]) > prio(stack[top])) stack[++top] = expr[i++]; else{ while (prio(expr[i]) <= prio(stack[top])){ suff[n].val = -1; suff[n++].ope = stack[top--]; } stack[++top] = expr[i++]; } if (isnum(expr[i])){ m = -1; while ((i < expr.size())&&(isnum(expr[i]))) cnum[++m] = expr[i++]; m = ctoi(cnum,m); suff[n].ope = '.'; suff[n++].val = m; } if (expr[i] =='(') stack[++top] = expr[i++]; if (expr[i] ==')'){ while (stack[top] != '('){ suff[n].val = -1; suff[n++].ope = stack[top--]; } top--; i++; } } while (stack[top] != '$'){ suff[n].val = -1; suff[n++].ope = stack[top--]; } }
Đã được chỉnh sửa lần cuối bởi Kevin Hoang : 17-04-2011 lúc 07:31 PM. Lý do: Sửa lại tag code là C++ nhìn cho đẹp
Sai là sai thế nào. Bạn nghĩ một người đến include mấy cái thư viện chuẩn mà còn sai lại post được hơn 600 bài ở cái forum này à
.
Chuẩn mới của C++ là header không kèm ".h", các object đều nằm trong namespace std. Không sai đâu bạn.
Phá toái hư không - Bạch nhật thăng thiên.
chỉ thiếu stdio.h vì có thằng fflush(stdin); này
Nhầm rồi coder_gate, flush mới của stdio.h, còn fflush là của iostream. Tui bỏ học C++ lâu lắm rồi nhưng vẫn chắc chắn với bạn điều này.
To susumt: Tui chắc chắn nếu bạn chạy trên Dev C++ bảo đảm chạy tốt, trên Borland C++ hay Visual C++ thì tui ko dám chắc vì có thể lỗi ở thư viện.
Đã được chỉnh sửa lần cuối bởi huynguyen : 28-10-2008 lúc 07:14 PM.
híc híc,mình nhớ loạnNhầm rồi coder_gate, flush mới của stdio.h, còn fflush là của iostream. Tui bỏ học C++ lâu lắm rồi nhưng vẫn chắc chắn với bạn điều này.
To susumt: Tui chắc chắn nếu bạn chạy trên Dev C++ bảo đảm chạy tốt, trên Borland C++ hay Visual C++ thì tui ko dám chắc vì có thể lỗi ở thư viện.,2 thằng na ná quá
, sorry huy nguyen nha
,VC++ cũng chạy được code trên
các bạn giải giúp mình bài này với:
Viết chương trình gồm có 2 quá trình. Quá trình thứ nhất cho người dùng nhập vào từ bàn phím một chuỗi biễu diễn một phép tính gồm các phần tử +, -, (, ). Độ ưu tiên của các phép tính trong ngoặc (cặp dấu ( & )) là cao nhất, phép + và – cùng độ ưu tiên. Ví dụ:
1+2+(2-3-4) –((3+4)-5)
(1+(-2)–((3+4)-5))
Sau đó truyền chuỗi dữ liệu này cho quá trình thứ hai. Quá trình thứ hai thực hiện tính toán trên và trả kết quả về cho quá trình thứ nhất để hiển thị cho người sử dụng biết.
Thực hiện bài toán dùng message queue để giao tiếp giứa 2 quá trình.
cảm ơn nhiều nhé.
@ anh HuyNguyen: a có thể cho em xin code chuyển từ hậu tố sang trung tố được ko ạ? E ko làm được :((
Em cảm ơn anh!
Quá tốt hihi đang cần cái thuật toán này để chuyển qua bool hihi thanks bồ!!
Chuyển trung tố sang hậu tố bằng cây nhị phân:
Cấu trúc:
Các hàm bổ trợ:Code:typedef struct Node { char s[20]; int ut; struct Node *pL, *pR; }Node;
Hàm chuyển đổi:Code:int UT(char *s,int k)//Lưu ý: khong có xử lý th nhập sai. { if(s[0] == '+'||s[0]=='-') return (k+1); if(s[0] == '*'||s[0] == '/') return (k+2); if(s[0] == '^') return (k+3); return (k+4); } Node* TaoNode(char *s,int k) { Node* p = new Node; if(p) { strcpy(p->s,s); p->ut = UT(s,k); p->pL = p->pR = NULL; } return p; } void Them(Node* &p,char *s, int k) { if(!p) { p = TaoNode(s,k); return; } if(p->ut>UT(s,k)) { Node* q = TaoNode(s,k); if(!q)return; q->pL = p; p = q; } else Them(p->pR,s,k); }
Code://Hàm này trả về con trỏ đến cấu trúc cây lưu trữ! Node* Chuyen(char*fget) { int k = 0; Node* p = NULL; char *s; s = strtok(fget," "); while(s) { if(s[0] == '(') k += 5; else if(s[0] == ')') k-= 5; else Them(p,s,k); s = strtok(NULL," "); } return p; }