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

Sắp xếp lại mã nguồn cho trước trong C++


Cho biến kiểu string str chứa mã nguồn, tính độ dài chuỗi và truyền vào hàm. Nhiệm vụ là sắp xếp lại mã nguồn đã cho và in kết quả.

Các trường hợp đầu vào/đầu ra

Đầu vào - string str =

"#include <bits/stdc++.h> using namespace std; int main()"    "{ int sum, first, second; sum = first + second; printf(\"%d\", c);"    " return 0;}"

Đầu ra -

#include <bits/stdc++.h> using namespace std; int main(){    int sum, first, second;    sum = first + second;    printf("%d", c);    return 0; }

Đầu vào - string str =

"#include<bits/stdc++.h> using namespace std; int main()"    "{ printf(\"%d\", c);"    " return 0;}"

Đầu ra -

#include<bits/stdc++.h> using namespace std; int main(){    printf("%d", c);    return 0; }

Phương pháp sử dụng trong chương trình dưới đây

  • Nhập biến string str, tính độ dài lưu vào length.

  • Gọi hàm Rearrangement(str, length).

  • Trong hàm Rearrangement(arr, length):

    • Khai báo string str_1, int Parenthesis=0, Braces=0, count=0, i=0, j=0.

    • Vòng do-while: nếu str[i] là '#', '<', '>', ';', '}', '{', '(', ')' thì:

      • Nếu '{' → Braces++.
      • Nếu '}' → Braces--.
      • Nếu '<' và Parenthesis==0 → count++.
      • Nếu '>' và Parenthesis==0 → count--.
      • Nếu '(' → count=0, Parenthesis++.
      • Nếu ')' → Parenthesis--.
      • Nếu Parenthesis>0 → str_1 += str[i].
      • Ngược lại: nếu ')' → str_1 += str[i]; else if '{' hoặc '}' → str_1 += '\n' + str[i] + '\n'; else if count>0 → str_1 += str[i]; else if '#' → str_1 += '\n' + str[i]; else → str_1 += str[i] + '\n'.
    • Không phải ký tự đặc biệt: str_1 += str[i]; i++.

    • Kết thúc do-while khi i < length.

    • str_1 += '\0'.

    • Vòng for i=0 đến str_1.length(): in str_1[i].

  • In kết quả.

Ví dụ mã

#include <bits/stdc++.h> using namespace std; void Rearrangement(string str, int length){    string str_1;    int Parenthesis = 0;    int Braces = 0;    int count = 0;    int i = 0;    int j = 0;    do{       if(str[i] == '#' || str[i] == '<' || str[i] == '>' || str[i] == ';' || str[i] == '}' || str[i] == '{'   || str[i] == '(' || str[i] == ')'){          if(str[i] == '{'){             Braces++;          }          if(str[i] == '}'){             Braces--;          }          if(str[i] == '<' && Parenthesis == 0){             count++;          }          if(str[i] == '>' && Parenthesis == 0){             count--;          }          if(str[i] == '('){             count = 0;             Parenthesis++;          }          if(str[i] == ')'){             Parenthesis--;          }          if(Parenthesis > 0){             str_1 = str_1 + str[i];          }          else{             if(str[i] == ')'){                str_1 = str_1 + str[i];             }             else if(str[i] == '{' || str[i] == '}'){                str_1 = str_1 + '\n';                str_1 = str_1 + str[i];                str_1 = str_1 + '\n';             }             else if(count > 0){                str_1 = str_1 + str[i];             }             else if(str[i] == '#'){                str_1 = str_1 + '\n';                str_1 = str_1 + str[i];             }             else{                str_1 = str_1 + str[i];                str_1 = str_1 + '\n';             }          }       }       else{             str_1 = str_1 + str[i];          }          i++;    }while (i < length);     str_1 = str_1 + '\0';     for(i = 0; i < str_1.length(); i++){        cout<< str_1[i];     } } int main(){       string str = "#include <bits/stdc++.h>using namespace std;int main()"         "{ int sum, first, second; sum = first + second; printf(\"%d\", c);"         " return 0;}";       int length = str.length();       Rearrangement(str, length);       return 0; }

Đầu ra

Nếu chạy mã trên sẽ cho kết quả:

#include <bits/stdc++.h> using namespace std; int main() {    int sum, first, second;    sum = first + second;    printf("%d", c);    return 0; }