소스 코드를 저장하고 문자열의 크기를 계산하고 함수에 전달하는 데 사용할 문자열 유형 변수가 주어졌습니다. 주어진 소스 코드를 재배열한 다음 결과를 출력하는 작업입니다.
여기에 대한 다양한 입력 출력 시나리오를 살펴보겠습니다 -
입력 - 문자열 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;
} 아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
-
string형의 변수, 예를 들어 str을 입력하고 string의 크기를 계산하여 variable이라는 이름의 길이에 저장합니다.
-
데이터를 재배열(str, length) 함수에 전달합니다.
-
함수 내부 재정렬(arr, length)
-
문자열 유형 변수를 선언합니다. 예를 들어 str_1 및 정수 유형 변수를 괄호로 0으로, 중괄호를 0으로, 개수를 0으로, i를 0으로, j를 0으로 선언합니다.
-
do-WHILE을 시작합니다. 내부에서 str[i]가 '#'인지 또는 str[i]가 '<'인지 또는 str[i]가 '>'인지 또는 str[i]가 ';'인지 확인하십시오. OR str[i] is '}' OR str[i] is '{' OR str[i] is '(' OR str[i] is ')' 그런 다음 str[i]가 '{'인지 확인한 다음 중괄호 1.
-
str[i]가 '}'인지 확인한 다음 중괄호를 1만큼 감소시킵니다.
-
str[i]가 '<'이고 괄호가 0인지 확인한 다음 카운트를 1씩 증가시킵니다.
-
str[i]가 '>'이고 괄호가 0인지 확인한 다음 카운트를 1만큼 감소시킵니다.
-
str[i]가 '('인지 확인한 다음 count를 0으로 설정하고 괄호를 1씩 증가시킵니다.
-
str[i]가 ')'인지 확인한 다음 괄호를 1만큼 감소시킵니다.
-
IF 괄호가 0보다 큰지 확인한 다음 str_1을 str_1 + str[i]로 설정합니다. 그렇지 않으면 str[i]가 ')'인지 확인한 다음 str_1을 str_1 + str[i]로 설정하십시오.
-
ELSE IF, str[i]는 '{' OR 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를 1씩 증가시킵니다.
-
str_1을 str_1 + '\0'으로 설정합니다.
-
i에서 str_1 문자열의 길이보다 작아질 때까지 FOR 루프를 시작합니다. 루프 내에서 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;
}