เราได้รับตัวแปรประเภทสตริง สมมติว่า 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; }