Computer >> Máy Tính >  >> Lập trình >> C ++

Sắp xếp lại mã nguồn đã cho trong C ++

Chúng ta được cung cấp một biến kiểu chuỗi, giả sử, str sẽ được sử dụng để lưu trữ mã nguồn, sau đó tính toán kích thước của chuỗi và chuyển nó vào hàm. Nhiệm vụ là sắp xếp lại mã nguồn đã cho rồi in kết quả.

Hãy để chúng tôi xem các kịch bản đầu ra đầu vào khác nhau cho việc này -

Đầu vào - chuỗi 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 - chuỗi 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 tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Nhập một biến kiểu chuỗi, giả sử, str và tính toán kích thước của một chuỗi và lưu trữ nó trong một biến có độ dài được đặt tên.

  • Truyền dữ liệu vào hàm Sắp xếp lại (str, chiều dài).

  • Bên trong chức năng Sắp xếp lại (arr, length)

    • Khai báo một biến kiểu chuỗi, giả sử, str_1 và các biến kiểu số nguyên dưới dạng Dấu ngoặc đơn thành 0, Dấu ngoặc nhọn thành 0, đếm thành 0, i thành 0 và j thành 0.

    • Bắt đầu do-WHILE. Bên trong, kiểm tra IF str [i] là '#' HOẶC str [i] là '<' HOẶC str [i] là '>' HOẶC str [i] là ';' HOẶC str [i] là '}' HOẶC str [i] là '{' HOẶC str [i] là '(' OR str [i] là ')' sau đó kiểm tra IF str [i] là '{' rồi tăng niềng răng bằng 1.

    • Kiểm tra IF str [i] là '}' rồi giảm Dấu ngoặc nhọn đi 1.

    • Kiểm tra IF str [i] là '<' VÀ Dấu ngoặc đơn là 0 rồi tăng số lượng lên 1.

    • Kiểm tra IF str [i] là '>' VÀ Dấu ngoặc đơn là 0 sau đó giảm số lượng đi 1.

    • Kiểm tra IF str [i] is '(' sau đó đặt số đếm thành 0 và tăng Dấu ngoặc đơn lên 1.

    • Kiểm tra IF str [i] là ')' rồi giảm dấu ngoặc đơn bằng 1.

    • Kiểm tra Dấu ngoặc đơn IF lớn hơn 0 rồi đặt str_1 thành str_1 + str [i]. ELSE, kiểm tra IF str [i] là ')' rồi đặt str_1 thành str_1 + str [i].

    • ELSE IF, str [i] là '{' HOẶC str [i] là '}' thì đặt str_1 thành str_1 + '\ n', str_1 thành str_1 + str [i] và str_1 thành str_1 + '\ n'.

    • ELSE IF, số lượng lớn hơn 0 thì đặt str_1 thành str_1 + str [i].

    • ELSE IF, str [i] là '#' sau đó đặt str_1 thành str_1 + '\ n' và str_1 thành str_1 + str [i].

    • ELSE, đặt str_1 thành str_1 + str [i] và str_1 thành str_1 + '\ n'.

    • ELSE, đặt str_1 thành str_1 + str [i] và tăng i lên 1.

    • Đặt str_1 thành str_1 + '\ 0'.

    • Bắt đầu vòng lặp FOR từ i đến 0 cho đến khi tôi nhỏ hơn độ dài của chuỗi str_1. Bên trong vòng lặp, in str_1 [i].

  • In kết quả.

Ví dụ

#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úng ta chạy đoạn mã trên, nó sẽ tạo ra Kết quả sau

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