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