Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 주어진 소스 코드 재정렬하기

문자열 타입 변수 str에 소스 코드가 저장되어 있다고 가정해 봅시다. 먼저 문자열의 크기를 계산한 뒤 함수에 전달하고, 주어진 소스 코드를 알맞게 재정렬하여 결과를 출력하는 것이 이번 문제의 목표입니다.

입출력 시나리오 살펴보기

입력 − string 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;
}

입력 − string 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을 입력받고, 문자열의 크기를 계산하여 length라는 이름의 변수에 저장합니다.

  • 데이터를 Rearrangement(str, length) 함수에 전달합니다.

  • Rearrangement(arr, length) 함수 내부에서 다음 작업을 수행합니다.

    • 문자열 타입 변수 str_1과 정수형 변수 Parenthesis = 0, Braces = 0, count = 0, i = 0, j = 0을 선언합니다.

    • do-WHILE 루프를 시작합니다. 루프 안에서 str[i]가 '#', '<', '>', ';', '}', '{', '(', ')' 중 하나인지 확인하고, 만약 str[i]가 '{'라면 Braces 값을 1 증가시킵니다.

    • str[i]가 '}'라면 Braces 값을 1 감소시킵니다.

    • str[i]가 '<'이고 Parenthesis가 0이라면 count를 1 증가시킵니다.

    • str[i]가 '>'이고 Parenthesis가 0이라면 count를 1 감소시킵니다.

    • str[i]가 '('라면 count를 0으로 설정하고 Parenthesis를 1 증가시킵니다.

    • str[i]가 ')'라면 Parenthesis를 1 감소시킵니다.

    • Parenthesis가 0보다 크면 str_1에 str[i]를 추가합니다. 그렇지 않은 경우, str[i]가 ')'라면 str_1에 str[i]를 추가합니다.

    • 그 외에 str[i]가 '{' 또는 '}'라면 str_1에 '\n', str[i], '\n'을 순서대로 추가합니다.

    • count가 0보다 크다면 str_1에 str[i]를 추가합니다.

    • str[i]가 '#'이라면 str_1에 '\n'과 str[i]를 추가합니다.

    • 위 조건에 모두 해당하지 않으면 str_1에 str[i]와 '\n'을 추가합니다.

    • 특수 문자가 아닌 일반 문자라면 str_1에 str[i]를 추가하고 i를 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;
}