Em có đề bài như sau:
code của em: https://ideone.com/UZBy47
code của em bị lỗi chỗ nào ạ?
Về logic thì đúng rồi. Mình chỉ viết thêm cho mấy bạn đọc dễ hiểu hơn:
st là vector chứa các toán tử (operator)out là biểu thức S dưới dạng postfix.Từ dòng 60 -> 94 là đoạn code chuyển từ biểu thức infix S thành postfix out: (bỏ bớt " của string cho gọn)
Từ dòng 91 -> 104 là đoạn code thực hiện tính toán trên biểu thức postfix out, tìm 1 cặp 3 phần tử liên tiếp trong out có dạng { number_1, number_2, operator }, rồi thu gọn thành { number_3 }, với number_3 = number_1 operator number_2:
Về lỗi của bạn, thực sự khó tìm ra lỗi thật, nhưng mình thấy 3 chỗ sau, không biết có giải quyết được không.
Lỗi thứ nhất, ở hàm lv(), bạn chỉ return cho 3 trường hợp, giả sử c không phải là +, -, *, /, ( thì nó sẽ return ra giá trị gì.
Lỗi thứ 2, ở hàm llToString(). Khai báo s[4] không bao quát được điều kiện “các số có giá trị không vượt quá 100”, vì nó chỉ là điều kiện cho các số trong biểu thức S ban đầu. Trong khi s[4] xử lí cho tất cả các giá trị trung gian trong quá trình tính toán, có thể lớn hơn 9999 hoặc nhỏ hơn -999. Do đó, đề có thể đưa ra test case: S = 1-100*100 là chương trình của bạn bị ngỏm :v
Lỗi thứ 3, ở hàm StringToll(), bạn chưa xử lý cho trường hợp s là số âm.
Ngoài 3 lỗi, thì mình có lời khuyên nữa là bạn nên tận dụng các hàm của std::string, như chuyển từ số sang string, string sang số, và tận dụng triệt để để tránh các lỗi về mảng char[].
Anh @hungaya nói đúng đó bạn.
Mình chỉ đưa ra một vài case lỗi cho bạn tiện debug thôi. 
Inp:
5
(1-2)*3
8/(2-4)
6-9+1
1-2+3
Out:
-87
0
-26
-26
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?