重新排列給定的 C++ 原始碼


我們給定一個字串型別的變數,例如 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,計算字串的大小並將其儲存在一個名為 length 的變數中。

  • 將資料傳遞給函式 Rearrangement(str, length)。

  • 在函式 Rearrangement(arr, length) 內部:

    • 宣告一個字串型別的變數,例如 str_1,以及整數型別的變數 Parenthesis(初始化為 0)、Braces(初始化為 0)、count(初始化為 0)、i(初始化為 0)和 j(初始化為 0)。

    • 開始 do-WHILE 迴圈。在迴圈內部,檢查 IF str[i] 是 '#' 或 '<' 或 '>' 或 ';' 或 '}' 或 '{' 或 '(' 或 ')',然後檢查 IF str[i] 是 '{',則將 braces 加 1。

    • 檢查 IF str[i] 是 '}',則將 Braces 減 1。

    • 檢查 IF str[i] 是 '<' 且 Parenthesis 為 0,則將 count 加 1。

    • 檢查 IF str[i] 是 '>' 且 Parenthesis 為 0,則將 count 減 1。

    • 檢查 IF str[i] 是 '(',則將 count 設定為 0 並將 Parenthesis 加 1。

    • 檢查 IF str[i] 是 ')',則將 Parenthesis 減 1。

    • 檢查 IF Parenthesis 大於 0,則將 str_1 設定為 str_1 + str[i]。否則,檢查 IF str[i] 是 ')',則將 str_1 設定為 str_1 + str[i]。

    • 否則 IF,str[i] 是 '{' 或 '}',則將 str_1 設定為 str_1 + '\n',str_1 設定為 str_1 + str[i],str_1 設定為 str_1 + '\n'。

    • 否則 IF,count 大於 0,則將 str_1 設定為 str_1 + str[i]。

    • 否則 IF,str[i] 是 '#',則將 str_1 設定為 str_1 + '\n' 和 str_1 設定為 str_1 + str[i]。

    • 否則,將 str_1 設定為 str_1 + str[i] 和 str_1 設定為 str_1 + '\n'。

    • 否則,將 str_1 設定為 str_1 + str[i] 並將 i 加 1。

    • 將 str_1 設定為 str_1 + '\0'。

    • 從 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;
}

更新於:2021年11月2日

313 次瀏覽

啟動您的 職業生涯

完成課程後獲得認證

開始學習
廣告