Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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

<시간/>

소스 코드를 저장하고 문자열의 크기를 계산하고 함수에 전달하는 데 사용할 문자열 유형 변수가 주어졌습니다. 주어진 소스 코드를 재배열한 다음 결과를 출력하는 작업입니다.

여기에 대한 다양한 입력 출력 시나리오를 살펴보겠습니다 -

입력 - 문자열 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;
}