Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Chương trình C loại bỏ dấu ngoặc khỏi biểu thức

Đề bài

Đơn giản hóa biểu thức bằng cách xóa dấu ngoặc, xử lý đúng dấu +/- bên trong ngoặc sau dấu trừ.

Ví dụ

  • (x+y)+(z+q) → x+y+z+q
  • (x-y+z)-p+q → x-y+z-p+q

Thuật toán

  1. Duyệt chuỗi, sao chép sang chuỗi mới.
  2. Gặp ( sau -: đảo dấu các toán tử bên trong (+↔-).
  3. Gặp ( sau + hoặc đầu chuỗi: bỏ qua ngoặc, giữ nguyên dấu.
  4. Bỏ qua ).

Chương trình C

#include <stdio.h>

int main() {
    int i=0, c=0, j=0;
    char a[100], b[100];
    printf("Nhập biểu thức: ");
    scanf("%s", a);
    while(a[i]!='\0') {
        if(a[i]=='(' && a[i-1]=='-') {
            (c==0)?j=i:j=c;
            while(a[i]!=')') {
                if(a[i+1]=='+') b[j++]='-';
                else if(a[i+1]=='-') b[j++]='+';
                else if(a[i+1]!=')') b[j++]=a[i+1];
                i++;
            }
            c=j+1;
        }
        else if(a[i]=='(' && a[i-1]=='+') {
            (c==0)?j=i:j=c;
            while(a[i]!=')') { b[j++]=a[i+1]; i++; }
            j--; c=j+1;
        }
        else if(a[i]==')') { i++; continue; }
        else { b[j++]=a[i]; }
        i++;
    }
    b[j]='\0';
    printf("Kết quả: %s", b);
    return 0;
}

Kết quả

Nhập: (x+y)-z
Kết quả: x+y-z