Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จัดเรียงซอร์สโค้ดที่กำหนดใหม่ใน C++


เราได้รับตัวแปรประเภทสตริง สมมติว่า str ซึ่งจะใช้ในการจัดเก็บซอร์สโค้ด จากนั้นคำนวณขนาดของสตริงและส่งผ่านไปยังฟังก์ชัน งานคือจัดเรียงซอร์สโค้ดที่กำหนดใหม่แล้วพิมพ์ผลลัพธ์

ให้เราดูสถานการณ์อินพุตเอาต์พุตที่หลากหลายสำหรับสิ่งนี้ -

ป้อนข้อมูล − สตริง str =

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

ผลผลิต

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

ป้อนข้อมูล − สตริง str =

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

ผลผลิต

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

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • ป้อนตัวแปรประเภทสตริง สมมติว่า str และคำนวณขนาดของสตริงและเก็บไว้ในความยาวที่ตั้งชื่อตัวแปร

  • ส่งข้อมูลไปยังฟังก์ชัน Rearrangement(str, length)

  • ภายในฟังก์ชัน การจัดเรียงใหม่ (arr, length)

    • ประกาศตัวแปรประเภทสตริง สมมติว่าตัวแปรประเภท str_1 และจำนวนเต็มเป็นวงเล็บถึง 0, วงเล็บปีกกาที่ 0, นับเป็น 0, i ถึง 0 และ j ถึง 0

    • เริ่มทำในขณะที่ ข้างใน ให้ตรวจสอบว่า str[i] คือ '#' OR str[i] คือ '<' OR str[i] คือ '>' OR str[i] คือ ';' หรือ str[i] คือ '}' OR str[i] คือ '{' OR str[i] คือ '(' OR str[i] คือ ')' จากนั้นตรวจสอบว่า str[i] คือ '{' แล้วเพิ่มค่า จัดฟัน 1.

    • ตรวจสอบว่า str[i] คือ '}' จากนั้นให้ลดเครื่องมือจัดฟันลง 1

    • ตรวจสอบว่า str[i] เป็น '<' และวงเล็บเป็น 0 จากนั้นให้เพิ่มจำนวนขึ้น 1

    • ตรวจสอบว่า str[i] คือ '>' และวงเล็บเป็น 0 จากนั้นให้ลดจำนวนลง 1

    • ตรวจสอบว่า str[i] คือ '(' จากนั้นตั้งค่าให้นับเป็น 0 และเพิ่มวงเล็บขึ้น 1

    • ตรวจสอบว่า str[i] คือ ')' จากนั้นให้ลดวงเล็บลง 1

    • ตรวจสอบว่าวงเล็บ มากกว่า 0 แล้วตั้งค่า str_1 เป็น str_1 + str[i] มิฉะนั้น ให้ตรวจสอบว่า str[i] เป็น ')' แล้วตั้งค่า str_1 เป็น str_1 + str[i]

    • มิฉะนั้น str[i] คือ '{' หรือ str[i] คือ '}' จากนั้นตั้งค่า str_1 เป็น str_1 + '\n', str_1 เป็น str_1 + str[i] และ str_1 เป็น str_1 + '\n'

    • มิฉะนั้น หากนับมากกว่า 0 แล้วตั้งค่า str_1 เป็น str_1 + str[i]

    • มิฉะนั้น str[i] คือ '#' ให้ตั้งค่า str_1 เป็น str_1 + '\n' และ str_1 เป็น str_1 + str[i]

    • มิฉะนั้น ตั้งค่า str_1 เป็น str_1 + str[i] และ str_1 เป็น str_1 + '\n'

    • ELSE ตั้งค่า str_1 เป็น str_1 + str[i] และเพิ่ม i ขึ้น 1

    • ตั้งค่า str_1 เป็น str_1 + '\0'

    • เริ่มวนรอบ FOR จาก i ถึง 0 จนถึง i น้อยกว่าความยาวของสตริง str_1 ภายในลูป พิมพ์ str_1[i].

  • พิมพ์ผลลัพธ์

ตัวอย่าง

#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;
}

ผลลัพธ์

หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้

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